当活动和/或应用关闭时,保持广播接收器运行?

时间:2018-05-22 18:07:12

标签: java android broadcastreceiver android-service android-jobscheduler

我有一个活动,我可以点按一个按钮来启动BroadcastReceiver,它会监听wifi连接的变化。现在,当活动显示或我离开应用程序(按主页按钮),同时活动显示接收器工作正常。但是,如果我结束活动或终止整个应用程序(即在最近的任务列表中将其移除),接收器将不再工作。包含接收器的我的活动结构如下所示:

MainActivity.java

...

public class MainActivity extends AppCompatActivity {
...
    public BroadcastReceiver wifiStateReceiver = new BroadcastReceiver() {

        @Override
        public void onReceive(Context context, Intent intent) {
        ...
        }
    }
}

我已经阅读了ServicesJobSchedulers,并认为我可能必须使用其中一个让我的接收器随时运行。我真的不知道如何实现这些。任何人都可以向我解释如何做到这一点? 另外,将BroadcastReceiver包含在MainActivity类中是一个好主意,还是应该在单独的类中定义它?

非常感谢!

1 个答案:

答案 0 :(得分:1)

根据docs

,您正在创建一个已注册上下文的接收器
  

上下文注册的接收器只要接收广播即可接收广播   注册上下文有效。例如,如果您在其中注册   在活动上下文中,只要活动是,您就会收到广播   没有被破坏。如果您在应用程序上下文中注册,那么您   只要应用程序正在运行,就会收到广播。

您可以在单独的文件中创建BR并将其注册到清单文件中,以便在匹配目标过滤器时调用它:

<receiver android:name=".wifiStateReceiver"  android:exported="true">
    <intent-filter>
       <action android:name="android.net.wifi.STATE_CHANGE" />
    </intent-filter>
</receiver>

当意图过滤器匹配时,您的BR内的onReceive方法将被调用。

public class wifiStateReceiver extends BroadcastReceiver {

   @Override
   public void onReceive(Context context, Intent intent) {
      //do some quick processing and call an activity
   }
}
相关问题