android - 如何在不以 Intent 启动 Activity 的情况下从在 list 中注册的广播接收器调用 Activity 中的方法?

标签 android android-activity broadcastreceiver android-manifest

我有一个扩展的 broadcastreceiver 类,用于监听蓝牙连接/断开连接。我想让它改变我的 GUIActivity 中某些文本的颜色。我故意没有将它作为内部类:使 GUI 代码更易于管理/模块化。

我知道一种方法可以做到这一点:动态注册接收者并在 Activity 的上下文中传递它。然后在 onResume 和 onPause 中进行正常的注册/注销。这个解决方案可以在this post看到

但是,我希望我可以通过在 list 中注册我的接收器来减少一点代码,而不用担心注册/取消注册。

我试过在 Broadcastreceiver 的 onReceive 中转换 context,如下所示

((SmokinoGUI) context).indicateBTConnection();

这会抛出一个异常,说明无法将上下文转换为 SmokinoGUI。 indicateBTConnection() 是 SmoinoGUI Activity 中的一种方法,它按照它说的去做。

那么,有没有办法从已经在 list 中注册但尚未动态实例化的广播接收器调用 Activity 中的方法?

最佳答案

So, is there a way to call a method in an activity from a broadcastreceiver that has been registered in the manifest and has not been dynamically instantiated?

有很多方法。我最喜欢的是:

  1. 扩展应用程序类并将该类分配给 list 中的应用程序名称属性。

  2. 在该类中添加您的 Activity 实例并为其创建 getter 和 setter,您可以在 Activity onCreate() 中引用它们。

  3. 在您的 BroadcasetReceiver 中获取应用程序并调用 Activity 的 getter。

如果这一切听起来很复杂,那么,实际上并不复杂,并且在每个应用程序中使用它都是很好的逻辑。例如,我可以添加一些代码。

关于android - 如何在不以 Intent 启动 Activity 的情况下从在 list 中注册的广播接收器调用 Activity 中的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31799849/

相关文章:

android - 如何为多个宽度 :height ratio to avoid jump/lag/jank? 的图像优化 RecyclerView

android - 安装 kbox3 - undefined symbol : dlopen

java - 如何扫描 wifi 网络并将它们列在 ListView 中?

Android ListView 适配器检查它是否包含字符串

android - 摩托罗拉设备上的自定义权限失败

Android M 权限对话框未显示

android - 在Android中使用路径前缀

android - fragment 回调爆炸,如何应对?

android - 为什么我没有收到已安装的应用程序广播?

android - 无法从传入消息中获取广播接收