应用程序关闭时将数据从广播接收器发送到简单的java类

问题描述 投票:0回答:1

我正在构建一个Android应用程序来处理短信,我制作了广播接收器来监听传入的短信。当它到来时,它应该将短信内容发送到另一个类来执行一些逻辑,我使用接口来实现这一点,这是我的代码。

public class SmsReceiver extends BroadcastReceiver {

    public static void initSmsFetcher(SmsFetcher mSmsFetcher){
        smsFetcher = mSmsFetcher;
    }
    @SuppressLint("UnsafeProtectedBroadcastReceiver")
    @Override
    public void onReceive(Context context, Intent intent) {
        Bundle extras = intent.getExtras();
        if (extras != null){
            Object[] smsextras = (Object[]) extras.get( "pdus" );

            for (Object smsextra : smsextras) {
                SmsMessage smsmsg = SmsMessage.createFromPdu((byte[]) smsextra);

                smsFetcher.onSmsReceived(smsmsg);
                

            }

        }
    }


   

}
 interface SmsFetcher{
    void onSmsReceived(SmsMessage smsMessage);
 }

这是我的简单课程。

public class SmsEasy implements SmsFetcher{
    SmsEasy(){
        SmsReceiver.initSmsFetcher(this);

    }

@Override
    public void onSmsReceived(SmsMessage smsMessage) {
        // Do some logic.
    }

}

这是我的主要活动。

public class MainActivity extends AppCompatActivity {

    SmsEasy smsEasy;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        smsEasy = new SmsEasy();

    }


}

我在清单中注册了我的广播接收器。 当我的应用程序运行时,这工作正常,但当应用程序关闭时出现问题,它告诉我,smsFetcher 在这一行中为空: smsFetcher.onSmsReceived(smsmsg);但我的接收器仍然可以正常捕获短信。

java android broadcastreceiver
1个回答
0
投票

你的进程不会永远存在。当短信到达时,Android 可能需要为应用程序代码创建一个进程。当它这样做时,它将创建一个

SmsReceiver
的实例并在其上调用
onReceive()
。它不会创建
MainActivity
的实例。

因此,

SmsReceiver
需要完全独立于MainActivity
工作。当 
MainActivity
onReceive()
 被调用时,不要假设 
SmsReceiver
 在您的应用程序进程中执行了任何操作。

© www.soinside.com 2019 - 2024. All rights reserved.