How do you create an Android SMS intent? -
i want unit test sms broadcast reveiver's onreceive method don't know how create sms intent. onreceive method looks this:
@override public void onreceive(context context, intent intent) { if (intent.getaction() .equals("android.provider.telephony.sms_received")) { stringbuilder sb = new stringbuilder(); bundle bundle = intent.getextras(); if (bundle != null) { smsmessage[] messages = getmessagesfromintent(intent); } } } private smsmessage[] getmessagesfromintent(intent intent) { smsmessage retmsgs[] = null; bundle bdl = intent.getextras(); try { object pdus[] = (object[]) bdl.get("pdus"); retmsgs = new smsmessage[pdus.length]; (int n = 0; n < pdus.length; n++) { byte[] bytedata = (byte[]) pdus[n]; retmsgs[n] = smsmessage.createfrompdu(bytedata); } } catch (exception e) { log.e("getmessages", "fail", e); } return retmsgs;
}
any tips?
/christian
i think using gsm version of smsmessage. gsm version depreciated. smsmessage works differently. should have these imports: import android.telephony.smsmanager , import android.telephony.smsmessage. following code extract message body , originating address. following code works in broadcast receiver (note individual pdu extraction).
bundle bundle = intent.getextras(); if (bundle != null) { object[] pdus = (object[]) bundle.get("pdus"); (int = 0; < pdus.length; i++) { smsmessage = smsmessage.createfrompdu((byte[]) pdus[i]); originatingaddress = smsmessage.getoriginatingaddress(); if (!phonenumber.equals(originatingaddress)) { phonenumber = originatingaddress; // retain last number if different } messagebody += smsmessage.getmessagebody() + "\n"; // concatenate parts } }
the messagebody variable set "" earlier in code.
for testing, start emulator , use emulator control view send text messages. can 1 following menu windos->show view->other...->emulator control. view has telephony , gps entry capabilities. stuff bunch of log.d code , watch logcat...
Comments
Post a Comment