我有一个活动,我可以点按一个按钮来启动BroadcastReceiver
,它会监听wifi连接的变化。现在,当活动显示或我离开应用程序(按主页按钮),同时活动显示接收器工作正常。但是,如果我结束活动或终止整个应用程序(即在最近的任务列表中将其移除),接收器将不再工作。包含接收器的我的活动结构如下所示:
MainActivity.java
...
public class MainActivity extends AppCompatActivity {
...
public BroadcastReceiver wifiStateReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
...
}
}
}
我已经阅读了Services
和JobSchedulers
,并认为我可能必须使用其中一个让我的接收器随时运行。我真的不知道如何实现这些。任何人都可以向我解释如何做到这一点?
另外,将BroadcastReceiver
包含在MainActivity
类中是一个好主意,还是应该在单独的类中定义它?
非常感谢!
答案 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
}
}