即使未绑定,也会调用短信的广播接收器

Broadcast receiver for sms is invoked even it is unbound

我正在创建一个应用程序,我在其中使用广播接收器来获取即将到来的内容 message.I 我正在使用一个接口来实现广播接收器绑定并且 unbinding.This 已经在我的应用程序中实现另一个 app.There 它工作正常,但在当前应用程序中,如果 activity 停止或销毁,应用程序会崩溃,这会产生以下错误

Caused by: java.lang.NullPointerException: Attempt to invoke interface method 'void com.encureit.a24klen.interfaces.SmsListerner.messageReceived(java.lang.String)' on a null object reference

这是我的广播接收器class代码:

public class SmsReceiver extends BroadcastReceiver {
private static SmsListerner smsListener;
@Override
public void onReceive(Context context, Intent intent) {
    Bundle bundle=intent.getExtras();

    Object []pdus= (Object[]) bundle.get("pdus");

    for (int i=0;i<pdus.length;i++){
        SmsMessage smsMessage=SmsMessage.createFromPdu((byte[]) pdus[i]);

        String messagBody=smsMessage.getMessageBody();
        if (messagBody.contains("Password")){
            smsListener.messageReceived(messagBody);
        }
    }

}

public static void bindListner(SmsListerner listener){

    smsListener=listener;
}

public static void unBindListener(){
    smsListener=null;
}
}

我在 activity 的 onresume()

中调用这些方法
  @Override
protected void onResume() {
    super.onResume();
    SmsReceiver.bindListner(new SmsListerner() {
        @Override
        public void messageReceived(String messageText) {
            String msg=messageText;
            if (msg.contains("data")){

               //string operations
            }

        }
    });
}

并在 onDestroy

 @Override
protected void onStop() {
    super.onStop();
    SmsReceiver.unBindListener();

}

收到消息,一切正常,但当应用程序在后台运行时,它crashes.Please帮助我解决这个问题。在此先感谢

当然可以,当你停止 activity 时,smsListener 会变成 null,因为如果你不想在 activity 时发生任何事情,它就会崩溃已停止添加此

 if (messagBody.contains("Password")&&smsListener!=null){
            smsListener.messageReceived(messagBody);
        }