adb shell am broadcast - BroadcastReceiver throws nullpointer

杀马特。学长 韩版系。学妹 提交于 2019-12-13 05:10:01

问题


I'm trying to launch this command:

adb shell am broadcast -a android.provider.Telephony.SMS_RECEIVED --es sms_body "TEXTTEXTTEXT"   -n com.example.name/.receivers.SmsReceiver

And this code throws null pointer exception:

public class SmsReceiver extends BroadcastReceiver {

...

private Context mContext;
private Intent mIntent;

public void onReceive(Context context, Intent intent) {
    mContext = context;
    mIntent = intent;

    String action = intent.getAction();
    if (action.equals(Const.ACTION_SMS_RECEIVED)) {
        String address = "", str = "";

        SmsMessage[] msgs = getMessagesFromIntent(mIntent);

        ...

    }
}

public static SmsMessage[] getMessagesFromIntent (Intent intent){
        Object[] messages = (Object[]) intent.getSerializableExtra("pdus");
        byte[][] pduObjs = new byte[messages.length][];

        for (int i = 0; i < messages.length; i++) {
            pduObjs[i] = (byte[]) messages[i];
        }

        byte[][] pdus = new byte[pduObjs.length][];
        int pduCount = pdus.length;
        SmsMessage[] msgs = new SmsMessage[pduCount];
        for (int i = 0; i < pduCount; i++) {
            pdus[i] = pduObjs[i];
            msgs[i] = SmsMessage.createFromPdu(pdus[i]);
        }
        return msgs;
}

}

And here is the console output:

12-30 15:48:34.724  26032-26032/com.example.name E/AndroidRuntime﹕ FATAL EXCEPTION: main
    Process: com.example.name, PID: 26032
    java.lang.RuntimeException: Unable to start receiver com.example.name.receivers.SmsReceiver: java.lang.NullPointerException
            at android.app.ActivityThread.handleReceiver(ActivityThread.java:2567)
            at android.app.ActivityThread.access$1800(ActivityThread.java:161)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1341)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:157)
            at android.app.ActivityThread.main(ActivityThread.java:5356)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)
            at dalvik.system.NativeStart.main(Native Method)
     Caused by: java.lang.NullPointerException
            at com.example.name.receivers.SmsReceiver.getMessagesFromIntent(SmsReceiver.java:60)
            at com.example.name.receivers.SmsReceiver.onReceive(SmsReceiver.java:30)
            at android.app.ActivityThread.handleReceiver(ActivityThread.java:2552)
            at android.app.ActivityThread.access$1800(ActivityThread.java:161)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1341)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:157)
            at android.app.ActivityThread.main(ActivityThread.java:5356)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)
            at dalvik.system.NativeStart.main(Native Method)

Now, here is the tricky part. My code inside SmsReceiver works for normal SMS messages. When I try to "simulate" this problem, I get this error. Probalby I mixed up something with adb command. I tried to fix it myself, but no luck. Do you have any idea what I did wrong?


回答1:


Do you have any idea what I did wrong?

You are sending a broadcast with a string extra named sms_body. Your code is not using that. Your code is using a Serializable extra named pdus.

When I try to "simulate" this problem, I get this error.

Use the Emulator Control tab in DDMS, or perhaps the emulator console (e.g., telnet localhost 5554), to send simulated SMS messages to an emulator.

Or, move your SMS-processing logic into a Java class that you can test using JUnit.



来源:https://stackoverflow.com/questions/27707851/adb-shell-am-broadcast-broadcastreceiver-throws-nullpointer

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!