来自服务监听器的广播接收器

Broadcast Receiver from service Listener

我在服务中创建了一个广播接收器 (BR),它将对传入的具有特定号码和正文的 SMS 作出反应。我只需要它在用户操作后接收一些 seconds/minutes,这就是为什么我没有在清单或 activity 中注册它(用户可能会关闭它)。 BR 有两个部分,自动(工作正常)和手动应该启动 MainActivity 并启动 Dialog。我知道 Dialog 不能从 BR 启动,这就是我创建 Listener 的原因,但我的问题是服务启动后它总是 null。它在我的 MainActivityonCreate 中有价值,但是当服务启动时它变为 null,我明白为什么(服务重新初始化 Listener listener)。我什至尝试将初始化的侦听器值放入 SharedPrefs 并在之后恢复它,但是当我尝试使用 json 存储它时,它只会再次存储 null 。
那么我该如何制作我的 listener != null???这些是我的代码的相关部分:

主要活动

onCreate {
SMSService smsReceiver = new SMSService();
smsReceiver.setListener(new SMSService.Listener() {   //here listener from service is != null
     @Override
     public void onTextReceived(String s) {
          dialogS(s);           // totaly different dialog
     }
        });

...

mDialogBuilder = new AlertDialog.Builder(this);
...
.setPositiveButton(new OnClick...
       Intent servisIntent = new Intent(MainActivity.this, SMSService.class);
       startService(servisIntent);
...

}

短信服务

private Listener listener;        // and here it get null which is the problem

public int onStartCommand(Intent intent, int flags, int startId) {

...

 SMSReceiver = new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {

Intent i = new Intent(context, MainActivity.class);
context.startActivity(i);
if (listener != null) {
    listener.onTextReceived("4333");
}

}

void setListener(Listener listener) {
        this.listener = listener; }

interface Listener {
        void onTextReceived(String text);
    }

顺便说一句,我还尝试在调用 startService 后将 smsReceiver.setListener 代码块放入我的 Dialog .setPossitive onClickListener,希望它会在服务后启动,但什么都没有

在服务中使用 setter 方法安装侦听器机制是不好的做法。您可以使用 ResultReceiver to receive callback results from service. It is Parcelable,因此它可以在服务启动前在意图中传递