java - Android - 使用具有静态方法的助手类动态注册/取消注册接收器?
问题描述
情况:
我有一个带有静态方法的“助手”类,可以动态启用/禁用广播接收器。
当我需要注册(或)注销接收器时,我会从其他类调用这些方法。
问题:
我不知道如何从帮助类中动态地联合国
注册接收器..
(当我尝试这样做context.unregisterReceiver(myReceiver);
时它无法识别myReceiver
)。
问题:
如何正确引用下面代码中myReceiver
的receiverUnregister
方法?
public class GpsReceiverHelper {
// Called from a different Class when I need to Register the Receiver
public static void receiverRegister(Context context) {
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("android.location.PROVIDERS_CHANGED");
final BroadcastReceiver myReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
// Receiver code goes here
}
};
context.registerReceiver(myReceiver, intentFilter);
}
// Called from a different Class when I need to UN-Register the Receiver
public static void receiverUnregister(Context context) {
// THIS DOESN'T WORK BECAUSE "myReceiver" can't be found..
context.unregisterReceiver(myReceiver);
}
}
同样,我计划在不同的类中调用这些方法。
执行此操作并正确分配所有内容的正确方法是什么?
解决方案
您必须保留对您注册的所有接收者的引用。你可以用不同的方式做到这一点。一种方法是拥有一个静态集合,将它们保存在这个助手类中(不是最好的方法)。另一种方法是在您的方法中返回接收器receiverRegister
。这样,调用该方法的任何人都必须维护引用,然后使用它来取消注册。
public BroadcastReceiver registerReceiver(...) {
...
return receiver;
}
public void unregisterReceiver(Context context, BroadcastReceiver receiver) {
context.unregisterReceiver(receiver);
}
推荐阅读
- android - 在 CoroutineScope 中下载多个图像
- c# - 验证是否调用了基类方法
- ios - 如何更改文本字段标题颜色?
- c - 为什么这个 C 代码会导致不稳定的运动?
- jenkins - 保存并应用后,Jenkins JDK安装消失
- node.js - Nodejs 在 ubuntu 上安装 node-canvas 不起作用。错误:“内部/模块/cjs/loader.js:1122”
- postgresql - 如何通过 Terraform 在 gcp 上的 postgresql 数据库实例中创建表?
- multidimensional-array - 需要帮助在 php 中创建多维数组并按键排序
- javascript - 如何将实时数据输入 NextJS?
- python - 在 Python Dict 上按天定价到按周定价