java - 当活动和/或应用程序关闭时保持广播接收器运行?
问题描述
我有一个活动,我可以点击一个按钮来启动一个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
还是我应该在一个单独的类中定义它?
非常感谢!
解决方案
根据文档,您正在创建一个上下文注册的接收器:
只要注册上下文有效,上下文注册的接收者就会接收广播。例如,如果您在 Activity 上下文中注册,只要该 Activity 未被销毁,您就会收到广播。如果您在应用程序上下文中注册,只要应用程序正在运行,您就会收到广播。
您可以在单独的文件中创建 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
}
}
推荐阅读
- django - 使用模型类创建的对象之间的 Django 选择列表表单
- sql - 使用 ROLLUP 计算总计,同时显示月份名称并按月份编号排序
- bash - sed: There is no file or directory on ssh bash script
- c# - 如何将 .net core EF 注入 WPF 应用程序
- go - http.SetCookie 的内存地址无效
- web-scraping - 用 Jasmine 测试 puppeteer?
- sql - 日期绑定 SQL 分组依据
- node.js - 数组的节点肥皂问题
- sql - 哪个Oracle查询更快
- java - 使用 AES-128-ECB(无填充)解码 base64 文本,哈希 md5 作为密钥