2012-02-21 73 views
6

我有一个广播接收器SMSApp,其中onReceive从意图读取bundleExtras。在这里,我如何从bundleExtras中读取电话号码?现在Android:如何从传入的短信中获取电话号码?

if(intent.getAction().equals(SMS_RECEIVED)) 
{ 
    Bundle bundleExtras = intent.getExtras(); 
    if (bundleExtras != null) 
    { 

    } 
} 
+0

可能重复http://stackoverflow.com/questions/5692354/in-android-how-should-i-get-phone-number-of -sms-sender – 2012-02-21 13:22:02

+0

@sergeybenner谢谢 – 2012-02-21 13:31:40

回答

9
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]); 
      } 

messages[0].getOriginatingAddress()是地址和messages[0].getMessageBody()是消息主体。

+0

谢谢你的工作 – 2012-02-21 13:35:40

0

这是一个详尽的“如何发送和接收短信”,你应该检查它的链接,它是完整的,充满例子:

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

也是用这个link,你可以这样做:

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

这对我不起作用,编译器无法识别Telephony类。有以下问题:Telephony.Sms.Intents.getMessagesFromIntent(intent); – 2012-02-21 13:29:15

4

教程在http://ukitech.blogspot.com/2014/11/android-sms-app.html

OUTPUT:

SmsReceiver.processReceivedSms:从+ 1650815xxxx

SmsReceiver.processReceivedSms SMS:SMS体试验4

/** * 创建者UKI上14年11月22日。 */

公共类SmsReceiver扩展广播接收器{

@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 
相关问题