我有一个扩展的 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?
有很多方法。我最喜欢的是:
扩展应用程序类并将该类分配给 list 中的应用程序名称属性。
在该类中添加您的 Activity 实例并为其创建 getter 和 setter,您可以在 Activity onCreate() 中引用它们。
在您的 BroadcasetReceiver 中获取应用程序并调用 Activity 的 getter。
如果这一切听起来很复杂,那么,实际上并不复杂,并且在每个应用程序中使用它都是很好的逻辑。例如,我可以添加一些代码。
关于android - 如何在不以 Intent 启动 Activity 的情况下从在 list 中注册的广播接收器调用 Activity 中的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31799849/