Android: how to get phone number from incoming SMS?

I have an SMSApp broadcast receiver that onReceive reads bundleExtras from an intent. Here, How can I read the phone number from bundleExtras?

if(intent.getAction().equals(SMS_RECEIVED)) { Bundle bundleExtras = intent.getExtras(); if (bundleExtras != null) { } } 
+6
source share
3 answers
 Bundle bundle = intent.getExtras(); Object[] pdus = (Object[]) bundle.get("pdus"); final SmsMessage[] messages = new SmsMessage[pdus.length]; for (int i = 0; i < pdus.length; i++) { messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]); } 

Now messages[0].getOriginatingAddress() is the address, and messages[0].getMessageBody() is the body of the message.

+9
source

Tutorial http://ukitech.blogspot.com/2014/11/android-sms-app.html

CONCLUSION:

SmsReceiver.processReceivedSms: SMS from + 1650815xxxx

SmsReceiver.processReceivedSms: Testing SMS 4 body

/ ** * Created by uki 11/22/14. * /

Public class SmsReceiver extends BroadcastReceiver {

 @Override public void onReceive(Context context, Intent intent) { final String tag = TAG + ".onReceive"; Bundle bundle = intent.getExtras(); if (bundle == null) { Log.w(tag, "BroadcastReceiver failed, no intent data to process."); return; } if (intent.getAction().equals(SMS_RECEIVED)) { Log.d(tag, "SMS_RECEIVED"); String smsOriginatingAddress, smsDisplayMessage; // You have to CHOOSE which code snippet to use NEW (KitKat+), or legacy // Please comment out the for{} you don't want to use. // API level 19 (KitKat 4.4) getMessagesFromIntent for (SmsMessage message : Telephony.Sms.Intents. getMessagesFromIntent(intent)) { Log.d(tag, "KitKat or newer"); if (message == null) { Log.e(tag, "SMS message is null -- ABORT"); break; } smsOriginatingAddress = message.getDisplayOriginatingAddress(); //see getMessageBody(); smsDisplayMessage = message.getDisplayMessageBody(); processReceivedSms(smsOriginatingAddress, smsDisplayMessage); } // Processing SMS messages the OLD way, before KitKat, // this WILL work on KitKat or newer Android // PDU is a "protocol data unit", which is the industry // format for an SMS message Object[] data = (Object[]) bundle.get("pdus"); for (Object pdu : data) { Log.d(tag, "legacy SMS implementation (before KitKat)"); SmsMessage message = SmsMessage.createFromPdu((byte[]) pdu); if (message == null) { Log.e(tag, "SMS message is null -- ABORT"); break; } smsOriginatingAddress = message.getDisplayOriginatingAddress(); // see getMessageBody(); smsDisplayMessage = message.getDisplayMessageBody(); processReceivedSms(smsOriginatingAddress, smsDisplayMessage); } } // onReceive method 
+4
source

This is a link to the detailed "how to send and receive sms messages", you should check this, it is full and full of examples:

http://mobiforge.com/developing/story/sms-messaging-android

also using this link you can do:

 if (bundle != null) { SmsMessage[] messages = Telephony.Sms.Intents.getMessagesFromIntent(intent); for (int i = 0; i &lt; messages.length; i++) { SmsMessage message = messages[i]; buf.append("Received SMS from "); buf.append(message.getDisplayOriginatingAddress()); buf.append(" - "); buf.append(message.getDisplayMessageBody()); } } 
0
source

Source: https://habr.com/ru/post/908973/


All Articles