【发布时间】:2018-05-24 08:37:05
【问题描述】:
我是 Kotlin 的新手,它看起来很棒!虽然今天,我一直在尝试用 Java 做一些超级简单的事情,但我完全陷入了困境。
我正在使用广播接收器来确定设备何时连接/断开电源。我需要做的就是相应地更新我的 UI。
我的代码
这是我的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(但在其他地方,稍后)中,我想在触发意图时更新我的 UI,例如在下面的函数中,背景颜色会发生变化。
private fun updateBackgroundColor( newBgColorId: Int = R.color.colorAccent){
val mainLayout = findViewById<View>(R.id.mainLayout)
val colorFade = ObjectAnimator.ofObject(
mainLayout, "backgroundColor", ArgbEvaluator(), oldBgColor, newBgColor)
colorFade.start()
}
问题
如何在 MainActivity 上调用函数,或在
BroadcastReceiver触发事件时更新我的 UI?
到目前为止我已经尝试过什么
我研究了在某个地方有一个静态变量,存储 BroadcastReciever 的结果,然后是我的 UI 类中的一个 observable,相应地观察和调用适当的函数。虽然在谷歌搜索如何做到这一点之后,看起来这在 Kotlin 中并不是一个好方法。
考虑尝试在 UI 线程上运行 BroadcastReciever,但这听起来很糟糕。
尝试将 Java 实现与我的 Kotlin 类混合,但无法正常工作。
令人沮丧的是,我在 SO 上发现了几个非常相似的问题。然而,它们的实现似乎都使用了 Java 特有的特性:
- Android BroadcastReceiver onReceive Update TextView in MainActivity
- How to update UI in a BroadcastReceiver
- Calling a Activity method from BroadcastReceiver in Android
- How to update UI from BroadcastReceiver after screenshot
我敢肯定,对于大多数 Android 开发人员来说,这是一个微不足道的问题,但我迷路了!如果您需要更多详细信息,请告诉我。提前非常感谢!
【问题讨论】:
标签: android broadcastreceiver kotlin