Delivery Intent的pdu是否包含发送SMS的人的电话号码?
问题描述:
我试图找出人的电话号码给谁的短信是从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的本机短信应用程序做到这一点。
答
我认为你没有从收到的意图中正确获得pdu。这将是一个单独的pdu,而不是一个数组。
试试这个:
public void onReceive(Context context, Intent intent) {
String pdu=intent.getStringExtra("pdu");
...
}