У меня есть BroadcastReceiver, который вызывается из обработчика из моего MainActivity
Нет, это не так. BroadcastReceiver
вызывается аварийным сигналом с AlarmManager
. Эта работа по планированию выполняется внутри Runnable
, отправленной Handler
, хотя неясно, почему нужны Handler
или Runnable
.
Когда я пытаюсь получить доступ к установленной переменной в MainActivity из моего BroadcastReceiver возвращает нуль
Скорее всего, ваш процесс был прерван между тем, когда вы запланировали тревогу и когда произошло тревожное событие. Это совершенно нормально. Кроме того, точка позади, используя AlarmManager
, чтобы ваш процесс был прекращен, но все же получает контроль в нужное время.
мне нужно получить контекст от MainActivity
Нет, вы этого не сделаете, так как не может быть экземпляр MainActivity
в вашем процессе. Если Android завершит процесс, то создаст новый экземпляр процесса для вызова вашего BroadcastReceiver
, не будет экземпляра MainActivity
.
Вам необходимо решить любую деловую проблему, которую вы имеете каким-либо другим способом.
Например, предположим, что это приложение для календаря, и вы хотите сообщить пользователю о предстоящем событии на основе напоминания, которое они установили на этом событии. Вы можете использовать AlarmManager
, чтобы получить контроль над временем напоминания.Однако, в тот момент, есть две возможные ситуации:
Деятельность ваших, которая имеет отношение к событию находится на переднем плане
ничего, кроме # 1, которая будет включать в себя случаи где в момент возникновения напоминания о событии у вас нет процесса, и пользователь делает что-то еще со своим устройством, например, проезжает по дороге и использует навигационное приложение, чтобы помочь им.
Правильная вещь здесь - позволить ваша деятельность знает о событии, , если и только если эта деятельность находится на переднем плане. Если действие не обрабатывает событие, вы можете поднять Notification
, чтобы сообщить пользователю о напоминании о календаре.
Самый простой способ выполнить это через шину событий, в которой действие реагирует на событие, или плакат события обрабатывает событие, если действие не отвечает. This directory содержит три примера приложений, реализующих этот шаблон для трех основных реализаций шины событий (LocalBroadcastManager
, EventBus greenrobot и Otto Square).
Хорошо, спасибо, и извините за неправильные указания. –