Уведомление о сборке, полученное от Firebase в библиотечном проекте - PullRequest
0 голосов
/ 04 февраля 2019

У меня Firebase реализован на уровне приложения для получения push-сообщений.В проекте библиотеки у меня есть BroadcastReceiver для перехвата push-сообщений.Я хочу создать уведомление из библиотеки, а не из приложения.
Включение приложения в состояние переднего плана, когда я создаю отложенное намерение, MainActivity контекст , доступный на уровне приложения передается в ожидающем намерении, после чего, если уведомление будет отправлено, я перенаправлюсь на MainActivity .Теперь, если приложение находится в отключенном состоянии и получено push-сообщение, мой широковещательный приемник в библиотеке перехватывает входящее сообщение, но не может создать уведомление, поскольку контекст MainActivity имеет значение null, поскольку MainActivity на уровне приложениянедоступно в трассировке стека.Кто-нибудь может помочь, как добиться этого?

Ниже мой код:

val mIntent = Intent(applicationContext,activityContext::class.java)
val pendingIntent = PendingIntent.getActivity(applicationContext, System.currentTimeMillis().toInt(),
mIntent,PendingIntent.FLAG_UPDATE_CURRENT)

, где activityContext в Intent является контекстом MainActivity получено внутри проекта библиотеки с уровня приложения.

Когда приложение находится в состоянии переднего плана , activityContext доступно и генерируется уведомление.Но когда приложение находится в состоянии kill , activityContext остается нулевым, что приводит к сбою при создании уведомления.

1 Ответ

0 голосов
/ 05 февраля 2019

Вам не нужны Activity Context, потому что, если приложение не запущено, оно не существует.

Приложение должно передать библиотеку имя из MainActivity (то есть: полное имя класса).Затем библиотека может использовать имя из MainActivity для установки параметров компонента в Intent.

Это означает вместо этого:

val mIntent = Intent(applicationContext,activityContext::class.java)

Вы хотите сделать что-то вроде этого (мой синтаксис Kotlin может быть неправильным, извините):

val mIntent = Intent()
mIntent.setClassName(applicationContext, nameOfMainActivity)
...