短信广播接收机被调用,即使它没有绑定

时间:2018-08-20 12:46:13

标签: android nullpointerexception broadcastreceiver sms

我正在创建一个应用程序,其中我正在使用广播接收器来获取即将到来的消息的内容。我正在使用接口来实现广播接收器的绑定和取消绑定。这已经在我的另一个应用程序中实现了。很好,但是在当前应用中,如果活动被停止或破坏,则应用会崩溃,从而产生以下错误

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

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

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;
}
}

我在活动的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();

}

消息来了,一切正常,但是当应用程序在后台运行时崩溃了。请为此提供帮助。谢谢

1 个答案:

答案 0 :(得分:1)

可以肯定的是,当您停止活动时,smsListener会变成null,因为如果您不想在活动停止时发生任何事情,它将崩溃

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