@e-14
Android-разработчик

Как использовать метод activity или fragment'a в BroadcastReceiver?

Пишу приложение-задачник (для себя, для портфолио и, может быть, для получения прибыли).
В этом приложении есть функционал, позволяющий отметить некоторую задачу, как "текущую" и вывести её на экран уведомлений. В уведомлении есть кнопка, позволяющая завершить задачу. Для обработки этой кнопки я как раз и создал receiver и зарегистрировал его в AndroidManifest.
Но, вот незадача, в методе onReceive невозможно вызвать метод, который позволяет завершить задачу, обратившись к хранилищу. Я могу только вызвать Toast'ы да объекты, который передал через PendingIntent, когда создавал уведомление.
Кто знает, как быть? Бьюсь над этим уже очень долго.

Был почти рабочий вариант, когда я объявлял динамический broadcastrecevier в activity, но его недостаток в том, что после закрытия приложения полностью (удаление с экрана активных приложений), broadcastreceiver переставал работать.

Не поверю, что не существует никаких методов обращения к приложению с помощью статичного broadcastrecevier, ибо в приложениях может быть реализована функции типа "mark as read"
  • Вопрос задан
  • 176 просмотров
Решения вопроса 1
zagayevskiy
@zagayevskiy Куратор тега Android
Android developer at Yandex
У ресивера и активити(и тем более фрагмента) абсолютно разные, непересекающиеся жизненные циклы.
Сделать то, что ты хочешь, можно разными способами. Если нужно показать UI, и что-то сделать в нём, нужно создавать PendingIntent для активити, и, соответственно, стартовать непосредственно её.

С помощью ресивера сделать тоже можно, непонятно только, почему "хранилище" у тебя привязано к активити. В ресивере непосредственно(или стартовав из него сервис, или запланировав джобу в WorkManager, зависит от) можно достучаться до "хранилища" и изменить в нем данные.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы