Я пытаюсь наблюдать MutableLiveData из класса broadcastReceiver, но он не работает.
Я отправляю уведомление и добавляю к нему действие, которое запускает pendingIntent. PendingIntent отправляет широковещательную рассылку моему классу NotificationReceiver, который расширяет BroadcastReceiver. Он попадает в функцию onReceive и изменяет MutableLiveData. В другом классе я пытаюсь наблюдать этот MutableLiveData, но он работает только в первый раз, в части инициализации. Однако, когда MutableLiveData изменяется в функции «onRecieve» NotificationReceiver, наблюдатель не работает.
Создание уведомления с действием
val intent = Intent(context, NotificationReceiver::class.java).apply {
action = "ZOOM"
}
val pendingIntent: PendingIntent =
PendingIntent.getBroadcast(context, 0, intent, 0)
val notifyBuilder = NotificationCompat.Builder(context, Constants.PRIMARY_CHANNEL_ID)
.setContentTitle(notificationTitle)
.setContentText(notificationText)
.setSmallIcon(notificationIcon)
.setContentIntent(pendingIntent)
.setAutoCancel(true)
.addAction(
R.drawable.icon,
"zoom",
pendingIntent
)
mNotifyManager?.notify(notificationID, notifyBuilder.build())
мой класс NotificationReceiver:
class NotificationReceiver: BroadcastReceiver() {
var shouldZoom = MutableLiveData<Boolean>()
init {
shouldZoom.value = false
}
override fun onReceive(context: Context?, intent: Intent?) {
when (intent?.action) {
"ZOOM" -> zoomLoaction()
}
}
private fun zoomLoaction() {
shouldZoom.value = true
}
}
Наблюдение во фрагменте:
var notificationReceiver = NotificationReceiver()
notificationReceiver.shouldZoom.observe(this, Observer {
if (it) {
// Log
}
})
Манифест:
<receiver android:name=".NotificationReceiver">
<intent-filter>
<action android:name="ZOOM" />
</intent-filter>
</receiver>