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在接收到事件时呈现。