Kotlin: llame a una function para actualizar la interfaz de usuario de BroadcastReceiver onReceive

Soy nuevo en Kotlin, ¡y parece increíble! Aunque hoy he estado tratando de hacer algo que en Java era muy simple, me he quedado totalmente estancado.

Estoy usando un receptor de difusión para determinar cuándo el dispositivo está conectado / desconectado de una fuente de alimentación. Y todo lo que necesito hacer es actualizar mi UI en consecuencia.


Mi código

Aquí están mis classs de BroadcastReceiver , y parece funcionar bien.

 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 } } } 

Ahora en mi MainActivity (pero en otro lugar, más adelante), quiero actualizar mi UI cuando se activa el bash, por ejemplo, en la function siguiente, el color de background cambia.

 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() } 

La pregunta

¿Cómo puedo invocar una function en MainActivity o actualizar mi UI cuando BroadcastReceiver activa un evento?


Lo que he intentado hasta ahora

  • Intenté tener una variable estática en alguna parte, almacenando el resultado de BroadcastReciever, luego un observable en mi class de UI, observando y llamando a la function apropiada en consecuencia. Aunque después de search en Google cómo hacerlo, parece que no es realmente un buen enfoque en Kotlin.

  • Se consideró intentar ejecutar BroadcastReciever en el hilo de UI, pero eso suena como una idea terrible.

  • Intenté mezclar una implementación Java con mi class Kotlin, pero no pude hacerlo funcionar.

Frustrante, encontré varias preguntas muy similares sobre SO. Sin embargo, sus implementaciones parecen usar características específicas de Java:

  • Android BroadcastReceiver onReceive Update TextView en MainActivity
  • Cómo actualizar la interfaz de usuario en un BroadcastReceiver
  • Llamar a un método de actividad de BroadcastReceiver en Android
  • Cómo actualizar la interfaz de usuario de BroadcastReceiver después de la captura de pantalla

Estoy seguro de que esta es una pregunta trivial para la mayoría de los desarrolladores de Android, ¡pero estoy perdido! Avíseme si necesita más detalles. Muchas gracias de antemano!

El método onReceive (…) se ejecuta en el hilo principal. Puedes registrar tu actividad en onStart () y anular el logging en onStop (), lo que garantizará que tu UI esté presente cuando se reciba el evento.