Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/194.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
broadcastReceiver内部的Android Java回调空_Java_Android - Fatal编程技术网

broadcastReceiver内部的Android Java回调空

broadcastReceiver内部的Android Java回调空,java,android,Java,Android,我试图在Android收到短信时获得通知,因此我为此编写了一个新类,如下所示: public class MyBroadcastReceiver extends BroadcastReceiver { public MyBroadcastCallback callback; public MyBroadcastReceiver() {} public MyBroadcastReceiver(MyBroadcastCallback callback) {

我试图在Android收到短信时获得通知,因此我为此编写了一个新类,如下所示:

public class MyBroadcastReceiver extends BroadcastReceiver {
    public MyBroadcastCallback callback;

    public MyBroadcastReceiver() {}

    public MyBroadcastReceiver(MyBroadcastCallback callback) {
        this.callback=callback;
        Log.d("myTag", "MyBroadcastReceiver CONSTRUCTOR.... "+this.callback);
        this.callback.OnReceiveSMS("phone TEST","message TEST");
    }

    @Override
    public void onReceive(Context context, Intent intent) {
        Bundle intentExtras = intent.getExtras();

        if (intentExtras != null) {

            Object[] sms = (Object[]) intentExtras.get("pdus");

            for (int i = 0; i < sms.length; ++i) {

                SmsMessage smsMessage = SmsMessage.createFromPdu((byte[]) sms[i]);

                String phone = smsMessage.getOriginatingAddress();
                String message = smsMessage.getMessageBody().toString();

                this.callback.OnReceiveSMS(phone,message);
            }
        }
    }

    public interface MyBroadcastCallback {
        void OnReceiveSMS(String phone,String message);
    }
}
public class MainActivity extends AppCompatActivity implements MyBroadcastReceiver.MyBroadcastCallback {

    MyBroadcastReceiver broadcastReceiver=null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        ....
        super.onCreate(savedInstanceState);
        broadcastReceiver=new MyBroadcastReceiver(this);
        ....
    }

    @Override
    public void OnReceiveSMS(String phone, String message) {
        Log.d("myTag", "NEW SMS MESSAGE PHONE="+phone + " message="+message);
    }
}
<receiver android:name=".MyBroadcastReceiver">
    <intent-filter>
        <action android:name="android.provider.Telephony.SMS_RECEIVED" />
    </intent-filter>
</receiver>
this.callback.OnReceiveSMS(phone, message);
Android清单如下所示:

public class MyBroadcastReceiver extends BroadcastReceiver {
    public MyBroadcastCallback callback;

    public MyBroadcastReceiver() {}

    public MyBroadcastReceiver(MyBroadcastCallback callback) {
        this.callback=callback;
        Log.d("myTag", "MyBroadcastReceiver CONSTRUCTOR.... "+this.callback);
        this.callback.OnReceiveSMS("phone TEST","message TEST");
    }

    @Override
    public void onReceive(Context context, Intent intent) {
        Bundle intentExtras = intent.getExtras();

        if (intentExtras != null) {

            Object[] sms = (Object[]) intentExtras.get("pdus");

            for (int i = 0; i < sms.length; ++i) {

                SmsMessage smsMessage = SmsMessage.createFromPdu((byte[]) sms[i]);

                String phone = smsMessage.getOriginatingAddress();
                String message = smsMessage.getMessageBody().toString();

                this.callback.OnReceiveSMS(phone,message);
            }
        }
    }

    public interface MyBroadcastCallback {
        void OnReceiveSMS(String phone,String message);
    }
}
public class MainActivity extends AppCompatActivity implements MyBroadcastReceiver.MyBroadcastCallback {

    MyBroadcastReceiver broadcastReceiver=null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        ....
        super.onCreate(savedInstanceState);
        broadcastReceiver=new MyBroadcastReceiver(this);
        ....
    }

    @Override
    public void OnReceiveSMS(String phone, String message) {
        Log.d("myTag", "NEW SMS MESSAGE PHONE="+phone + " message="+message);
    }
}
<receiver android:name=".MyBroadcastReceiver">
    <intent-filter>
        <action android:name="android.provider.Telephony.SMS_RECEIVED" />
    </intent-filter>
</receiver>
this.callback.OnReceiveSMS(phone, message);
它崩溃,异常情况是
this.callback
null

我知道一开始它不是
null
,因为在构造函数中我传入了实现该接口的主活动

为了进行调试,我还在构造函数中打印了
this.callback
,甚至在构造函数中调用了该函数,以确保它不是
null
,所有这些都能正常工作,但当一个文本出现并且安卓操作系统调用
OnReceive
时,它不知何故变成了
null


有人知道为什么它是空的吗?如何修复?

问题是,如果您只创建了类对象。您还必须为来自活动的sms创建广播目的过滤器,然后必须注册来自活动的广播。同时从manifest.xml中删除广播。将值从接收者传递给活动的最佳选择是使用本地广播管理器。因此,我必须接收大型主SMS广播,然后使用本地广播将其重新广播给我自己?感谢各位本地广播工作!!!