有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

broadcastReceiver内部的Android Java回调空

我试图在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);
    }
}

Android清单如下所示:

<receiver 安卓:name=".MyBroadcastReceiver">
    <intent-filter>
        <action 安卓:name="安卓.provider.Telephony.SMS_RECEIVED" />
    </intent-filter>
</receiver>

当接收到文本时,在MyBroadCastReceiver类中调用OnReceive,这非常有效

但是当我试图在OnReceive()内调用自己的回调函数来通知文本消息的主要活动时,如下所示:

this.callback.OnReceiveSMS(phone, message);

它崩溃,例外情况是this.callbacknull

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

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

有人知道为什么会这样吗?如何修复


共 (0) 个答案