PDA

View Full Version : سوال در مورد RFCOMM و SMS



dante0747
شنبه 23 آبان 1388, 19:12 عصر
سلام.
من می خوام در یک J2SE Application و با استفاده از بلوتوث و پروتکل RFCOMM و با AT Command با گوشیم sms بفرستم. یعنی AT Commandها را با ارتباط RFCOMM به گوشیم send کنم و گوشی sms بفرسته. کد زیر مربوط به برقراری ارتباط و ارسال sms است. اما کار نمیکنه. نمی دونم مشکل از کجاست....اگه میشه کمک کنید.



try {
StreamConnection connection = (StreamConnection) Connector.open("btspp://Device BT Address :port number;authenticate=false;encrypt=false;master=fal se");
OutputStream os = connection.openOutputStream();
os.write("AT+CNMI=0,1,1,1,0\r".getBytes());
os.write("AT+CSMP=17,169,0,0\r".getBytes());
os.write("AT+CMGF=1\r".getBytes());
os.write("AT+CMGS=\"+98 phone number\"\r".getBytes());
os.write("this is a test message\26".getBytes());
os.close();
connection.close();
} catch (IOException ex) {
ex.printStackTrace();
}

sg.programmer
یک شنبه 24 آبان 1388, 07:13 صبح
سلام دوست عزیز

ابتدا دستورات بالا را رو توی Hyper Terminal ارسال کنید ببین اس ام اس ات ارسال میشه
بعد این موارد رو چک کن

1) ابتدا می بایست دستور AT رو بفرستی
os.write("AT\r".getBytes());

2) اینو چک کن ببین OK میگیری در HT
AT+CNMI=0,1,1,1,0
OK
--------------
اگه نشد اینو تست کن و 0,1,1,1,0 در رنج ارائه شده هستش یا نه
AT+CNMI=?

اگه نبود مقادیر را با این جابجا کن
os.write("AT+CNMI=0,1,1,1,0\r".getBytes());

3) مهمتر از همه شما باید بعد از هر ارسال یک Wait داشته باشید. تا این خروجی از پورت را چک کنید
مثلا

while (!OK)
Thread.sleep(10);

4)شما بعد از ارسال
"AT+CMGS="NO
باید منتظر < از خروجی پورت تون باشید و سپس متن پیام را ارسال کنید



AT+CMGS="NO"
> SG.Programmer@Gmail.Com
Ctrl+Z

dante0747
یک شنبه 29 آذر 1388, 15:01 عصر
سلام.
میدونم که یه کم دیر شده....از اینکه دارم توی یه تاپیک قدیمی مطلب مینویسم عذر میخوام...:خجالت:
راستشو بخواین گوشی من (k850i) تکست مود را ساپورت نمیکرد و مجبور شدم برم سراغ pdu و یکسری مشکلات دیگه هم پیش اومد که باعث شد بین پست قبلی من و این پست حدود 1 ماه فاصله بیفته.... من کدم را به شکل زیر تغییر دادم :




try {
DiscoveryAgent agent = LocalDevice.getLocalDevice().getDiscoveryAgent();
String url = agent.selectService(new UUID(0x0003), ServiceRecord.NOAUTHENTICATE_NOENCRYPT, true);
System.out.println(url);
StreamConnection connection = (StreamConnection) Connector.open(url);
DataOutputStream os = connection.openDataOutputStream();
InputStream is = connection.openInputStream();
os.write("AT+CSCA?\r".getBytes());
os.flush();
synchronized (this) {
this.wait(1000);
}
os.write("AT+CMGF=0\r".getBytes());
os.flush();
synchronized (this) {
this.wait(1000);
}
os.write("AT+CMGS=14\r".getBytes());
os.flush();
synchronized (this) {
this.wait(1000);
}
os.write("0031000B819021217095F70000FF00\26".getBytes());
os.flush();
synchronized (this) {
this.wait(1000);
}
while (true) {
int c = is.read();
if (c != -1) {
System.out.print((char) c);
} else {
break;
}
}
os.close();
is.close();
connection.close();
} catch (BluetoothStateException ex) {
ex.printStackTrace();
} catch (IOException ex) {
ex.printStackTrace();
} catch (InterruptedException ex) {
ex.printStackTrace();
}

حاصل این کد اینه :




BlueCove version 2.1.0 on winsock
btspp://001FE4F85C94:2;authenticate=false;encrypt=false;ma ster=true
AT+CSCA?

+CSCA: "+989350001400",145

OK
AT+CMGF=0

OK
AT+CMGS=14

> 0031000B819021217095F70000FF00
+CMS ERROR: 304


همونطور که میبینید error 304 میده.....:عصبانی++::عصبانی++::عص بانی++::عصبانی++:
اگه دقت کنید حاصل همه at command ها به غیر از آخری جواب OK میده....من این دستورات را توی hyper terminal تست کردم و اس ام اس send شد.....به نظر شما مشکل از کجا میتونه باشه.....:متفکر:
در ضمن اگر میبینید که مدت wait ها زیاد است به این دلیل این کار را کردم که از بابت ارسال شدن command و اومن پاسخ خیالم راحت باشه ولی در آخر کار بعدا درستش میکنم....فعلا در حال تستم....

dante0747
دوشنبه 30 آذر 1388, 22:19 عصر
کسی نظری نداره.....؟؟؟؟؟:متفکر:

dante0747
پنج شنبه 03 دی 1388, 11:45 صبح
سلام جواب رو پیدا کردم.....کافیه به جای 26\ از 26(char) استفاده کنیم....اس ام اس send شد.....:لبخند::لبخند::لبخند::لب خند: