Android: Sending SMS works on Emulator but NOT on real devices -
updated: have tried code on phone (4.1.2), works perfectly. when tried on phone using 4.4.2, not work, returns "radio off". app set default app handling message fyi.
here activity send sms:
public class viewconversation extends activity { sqlitemanager sql; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.inbox_conversation); init(); initlistview(); initsendsms(); } @override public void onbackpressed() { startactivity(new intent(this, mainlayout.class)); } private void init() { sql = new sqlitemanager(this); } private void initlistview() { viewconversationadapter adapter = new viewconversationadapter(this, getmessages()); listview lv = (listview) findviewbyid(r.id.lv_conversation); lv.setadapter(adapter); } private string[] getmessages() { bundle b = getintent().getextras(); string fk_conversation_info = b.getstring("fk_conversation_info"); sql.open(); string[] result = sql.getconversationsmss(fk_conversation_info); sql.close(); return result; } /* ---------- send sms part ---------- */ private void initsendsms() { final edittext et_phone = (edittext) findviewbyid(r.id.et_addphonenum); final edittext et_message = (edittext) findviewbyid(r.id.et_messagebody); button bt_send = (button) findviewbyid(r.id.bt_send); bt_send.setonclicklistener(new view.onclicklistener() { @override public void onclick(view v) { string phonenumber = et_phone.gettext().tostring(); string message = et_message.gettext().tostring(); sendsms(phonenumber, message); } }); } private void sendsms(string phonenumber, string message) { string sent = "sms_sent"; string delivered = "sms_delivered"; pendingintent sentpi = pendingintent.getbroadcast(this, 0, new intent(sent), pendingintent.flag_update_current); pendingintent deliveredpi = pendingintent.getbroadcast(this, 0, new intent(delivered), pendingintent.flag_update_current); //---when sms has been sent--- registerreceiver(new broadcastreceiver(){ @override public void onreceive(context arg0, intent arg1) { switch (getresultcode()) { case activity.result_ok: toast.maketext(getbasecontext(), "sms sent", toast.length_short).show(); break; case smsmanager.result_error_generic_failure: toast.maketext(getbasecontext(), "generic failure", toast.length_short).show(); break; case smsmanager.result_error_no_service: toast.maketext(getbasecontext(), "no service", toast.length_short).show(); break; case smsmanager.result_error_null_pdu: toast.maketext(getbasecontext(), "null pdu", toast.length_short).show(); break; case smsmanager.result_error_radio_off: toast.maketext(getbasecontext(), "radio off", toast.length_short).show(); break; } viewconversation.this.unregisterreceiver(this); } }, new intentfilter(sent)); //---when sms has been delivered--- registerreceiver(new broadcastreceiver(){ @override public void onreceive(context arg0, intent arg1) { switch (getresultcode()) { case activity.result_ok: toast.maketext(getbasecontext(), "sms delivered", toast.length_short).show(); break; case activity.result_canceled: toast.maketext(getbasecontext(), "sms not delivered", toast.length_short).show(); break; } } }, new intentfilter(delivered)); smsmanager sms = smsmanager.getdefault(); sms.sendtextmessage(phonenumber, null, message, sentpi, deliveredpi); } }
here manifest activity:
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="vn.hak_developers.spamsms" > <uses-permission android:name="android.permission.read_sms" /> <uses-permission android:name="android.permission.write_sms" /> <uses-permission android:name="android.permission.send_sms" /> <uses-permission android:name="android.permission.receive_sms" /> <application android:allowbackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/apptheme" > <activity android:name=".mainlayout" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.main" /> <category android:name="android.intent.category.launcher" /> </intent-filter> </activity> <activity android:name=".setting.settingmethods" android:label="@string/app_name" > </activity> <activity android:name=".viewsms.viewbansim" android:label="@string/app_name" > </activity> <activity android:name=".viewsms.viewnhadat" android:label="@string/app_name" > </activity> <activity android:name=".viewsms.viewnganhang" android:label="@string/app_name" > </activity> <activity android:name=".viewsms.viewthongbao" android:label="@string/app_name" > </activity> <activity android:name=".viewsms.viewnhahang" android:label="@string/app_name" > </activity> <activity android:name=".viewsms.viewthurac" android:label="@string/app_name" > </activity> <activity android:name=".viewsms.viewconversation" android:label="@string/app_name" android:windowsoftinputmode="adjustresize"> <intent-filter> <action android:name="android.intent.action.send" /> <action android:name="android.intent.action.sendto" /> <category android:name="android.intent.category.default" /> <category android:name="android.intent.category.browsable" /> <data android:scheme="sms" /> <data android:scheme="smsto" /> <data android:scheme="mms" /> <data android:scheme="mmsto" /> </intent-filter> </activity> <!-- broadcastreceiver listens incoming sms messages --> <receiver android:name=".smsmanager.smsreceiver" android:permission="android.permission.broadcast_sms"> <intent-filter android:priority="1000"> <action android:name="android.provider.telephony.sms_deliver" /> <action android:name="android.provider.telephony.sms_receiver" /> </intent-filter> </receiver> <!-- broadcastreceiver listens incoming mms messages --> <receiver android:name=".smsmanager.mmsreceiver" android:permission="android.permission.broadcast_wap_push"> <intent-filter> <action android:name="android.provider.telephony.wap_push_deliver" /> <data android:mimetype="application/vnd.wap.mms-message" /> </intent-filter> </receiver> <!-- service delivers messages phone "quick response" --> <service android:name=".smsmanager.headlesssmssendservice" android:permission="android.permission.send_respond_via_message" android:exported="true" > <intent-filter> <action android:name="android.intent.action.respond_via_message"/> <category android:name="android.intent.category.default" /> <data android:scheme="sms" /> <data android:scheme="smsto" /> <data android:scheme="mms" /> <data android:scheme="mmsto" /> </intent-filter> </service> </application> </manifest>
it works when send sms between emulators, when run app on phone, toasts radio off (my phone not in airplane mode).
please advise.
i made app sent sms last year, did not sent intent in method. did this:
sms.sendtextmessage(number, null, message, null, null);
try this, maybe works.
edit
there's no need use code in sendsms(string phonenumber, string nessage)
simply this:
private void sendsms(string phonenumber, string message) { //pendingintent pi = pendingintent.getactivity(this, 0, // new intent(this, viewconversation.class), 0); smsmanager sms = smsmanager.getdefault(); sms.sendtextmessage(phonenumber, null, message, null, null);//edited toast.maketext(getbasecontext(), "sms sent", toast.length_short).show(); }
the pendingintent
object (pi) pointing same activity (viewconversation.java), when sms sent, nothing happen.
hope helps.
Comments
Post a Comment