2013-02-03 22 views
1

我试图找出人的电话号码给谁的短信是从Intent的PDU交付广播接收机的onReceive()发出这样Delivery Intent的pdu是否包含发送SMS的人的电话号码?

@Override 
public void onReceive(Context context, Intent intent) { 
    ThizLog.d(TAG, "Inside onReceive"); 
    Bundle bundle = intent.getExtras(); 
    Object[] messages = (Object[]) bundle.get("pdus"); 
    SmsMessage[] sms = new SmsMessage[messages.length]; 

    for (int n = 0; n < messages.length; n++) { 
     sms[n] = SmsMessage.createFromPdu((byte[]) messages[n]); 
    } 
    for (SmsMessage msg : sms) { 
     // Verify if the message came from our known sender 
     ThizLog.d(TAG,"!!! " + msg.getOriginatingAddress()); 

    } 
    switch (getResultCode()) { 
     case Activity.RESULT_OK: 
      // SMS delivered 
      break; 
     case Activity.RESULT_CANCELED: 
      /* 
      * SMS not delivered, show SMS_NOT_DELIVERED_MESSAGE 
      */ 
      Toast toast = Toast.makeText(context, SMS_NOT_DELIVERED_MESSAGE, Toast.LENGTH_LONG); 
      // shows toast on left top corner increase the zero value to 
      // slide it right and down 
      //toast.setGravity(Gravity.TOP | Gravity.LEFT, 0, 0); 
      toast.show(); 
      break; 
    } 
} 

,但是这导致以下错误

02-04 03:19:34.008: E/AndroidRuntime(21881): FATAL EXCEPTION: main 
02-04 03:19:34.008: E/AndroidRuntime(21881): java.lang.RuntimeException: Unable to start receiver com.abc.mnp.xyz.DeliveredSMSReceiver: java.lang.NullPointerException 
02-04 03:19:34.008: E/AndroidRuntime(21881): at android.app.ActivityThread.handleReceiver(ActivityThread.java:2827) 
02-04 03:19:34.008: E/AndroidRuntime(21881): at android.app.ActivityThread.access$3200(ActivityThread.java:126) 
02-04 03:19:34.008: E/AndroidRuntime(21881): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2088) 
02-04 03:19:34.008: E/AndroidRuntime(21881): at android.os.Handler.dispatchMessage(Handler.java:99) 
02-04 03:19:34.008: E/AndroidRuntime(21881): at android.os.Looper.loop(Looper.java:123) 
02-04 03:19:34.008: E/AndroidRuntime(21881): at android.app.ActivityThread.main(ActivityThread.java:4633) 
02-04 03:19:34.008: E/AndroidRuntime(21881): at java.lang.reflect.Method.invokeNative(Native Method) 
02-04 03:19:34.008: E/AndroidRuntime(21881): at java.lang.reflect.Method.invoke(Method.java:521) 
02-04 03:19:34.008: E/AndroidRuntime(21881): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858) 
02-04 03:19:34.008: E/AndroidRuntime(21881): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
02-04 03:19:34.008: E/AndroidRuntime(21881): at dalvik.system.NativeStart.main(Native Method) 
02-04 03:19:34.008: E/AndroidRuntime(21881): Caused by: java.lang.NullPointerException 
02-04 03:19:34.008: E/AndroidRuntime(21881): at com.abc.mnp.xyz.DeliveredSMSReceiver.onReceive(DeliveredSMSReceiver.java:37) 
02-04 03:19:34.008: E/AndroidRuntime(21881): at android.app.ActivityThread.handleReceiver(ActivityThread.java:2816) 
02-04 03:19:34.008: E/AndroidRuntime(21881): ... 10 more 

这是可能的,Android的本机短信应用程序做到这一点。

回答

0

我认为你没有从收到的意图中正确获得pdu。这将是一个单独的pdu,而不是一个数组。

试试这个:

public void onReceive(Context context, Intent intent) { 
    String pdu=intent.getStringExtra("pdu"); 

    ... 
} 
相关问题