Как наблюдать переменную широковещательного приемника mutableLiveData? - PullRequest
0 голосов
/ 30 октября 2019

Я пытаюсь наблюдать 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...