Kotlin:调用函数从BroadcastReceiver onReceive更新UI
我是Kotlin新手,看起来很棒! 尽管今天,我一直在尝试在Java中做一些超级简单的事情,但是我完全陷入了困境。
我正在使用广播接收器来确定设备何时与电源连接/断开。 而我所需要做的就是相应地更新我的用户界面。
我的代码
这是我的BroadcastReceiver
类,它似乎工作正常。
class PlugInReceiver : BroadcastReceiver() { override fun onReceive(context: Context, intent: Intent) { val action = intent.action if (action == Intent.ACTION_POWER_CONNECTED) { // Do stuff when power connected } else if (action == Intent.ACTION_POWER_DISCONNECTED) { // Do more stuff when power disconnected } } }
现在在我的MainActivity
(但其他地方,稍后),我想更新我的用户界面时,意图被激发,例如在下面的函数,背景颜色的变化。
private fun updateBackgroundColor( newBgColorId: Int = R.color.colorAccent){ val mainLayout = findViewById(R.id.mainLayout) val colorFade = ObjectAnimator.ofObject( mainLayout, "backgroundColor", ArgbEvaluator(), oldBgColor, newBgColor) colorFade.start() }
问题
如何在MainActivity上调用函数,或者在
BroadcastReceiver
触发事件时更新我的UI?
到目前为止,我已经尝试过
-
我研究了一个静态variables的地方,存储了BroadcastReciever的结果,然后在我的UI类中观察,相应地观察和调用相应的函数。 虽然谷歌之后如何做到这一点,看起来这不是一个真正的好方法在Kotlin。
-
考虑尝试在UI线程上运行BroadcastReciever,但这听起来像一个可怕的想法。
-
试图混合一个Java实现与我的Kotlin类,但不能得到它的工作。
令人沮丧的是,我发现了几个非常类似的问题。 但是他们的实现似乎都使用Java特有的function:
- Android BroadcastReceiver onReceive在MainActivity中更新TextView
- 如何更新BroadcastReceiver中的用户界面
- 在Android中从BroadcastReceiver调用一个Activity方法
- 截图后如何从BroadcastReceiver更新UI
我相信这对于大多数Android开发者来说是一个微不足道的问题,但我迷路了! 让我知道你是否需要更多的细节。 首先十分感谢!
onReceive(…)方法在主线程上运行。 您可以在onStart()中注册您的Activity,并将其注销到onStop()中,这将保证您的UI在接收到事件时呈现。