2015-01-02 2 views
-3

У меня есть BroadcastReceiver, который вызывается из обработчика из моего MainActivity. Когда я пытаюсь получить доступ к переменной, заданной в MainActivity из моего BroadcastReceiver, он возвращает null. Я установил MainActivity для супер, а переменную я хочу статично.Почему мой вещатель, возвращающий нули в переменные, установленные в oncreate?

Мне нужно получить контекст из MainActivity, и я не могу заставить его это сделать. Я попытался поместить обработчик внутри BroadcastReceiver, чтобы вернуться к ActivityMain в надежде, что он сможет получить доступ к контексту таким образом.

ActivityMain.java: http://pastebin.com/q2NtnZuU

BroadcastReceiver: http://pastebin.com/Vw6eUbKg

ответ

2

У меня есть BroadcastReceiver, который вызывается из обработчика из моего MainActivity

Нет, это не так. BroadcastReceiver вызывается аварийным сигналом с AlarmManager. Эта работа по планированию выполняется внутри Runnable, отправленной Handler, хотя неясно, почему нужны Handler или Runnable.

Когда я пытаюсь получить доступ к установленной переменной в MainActivity из моего BroadcastReceiver возвращает нуль

Скорее всего, ваш процесс был прерван между тем, когда вы запланировали тревогу и когда произошло тревожное событие. Это совершенно нормально. Кроме того, точка позади, используя AlarmManager, чтобы ваш процесс был прекращен, но все же получает контроль в нужное время.

мне нужно получить контекст от MainActivity

Нет, вы этого не сделаете, так как не может быть экземпляр MainActivity в вашем процессе. Если Android завершит процесс, то создаст новый экземпляр процесса для вызова вашего BroadcastReceiver, не будет экземпляра MainActivity.

Вам необходимо решить любую деловую проблему, которую вы имеете каким-либо другим способом.

Например, предположим, что это приложение для календаря, и вы хотите сообщить пользователю о предстоящем событии на основе напоминания, которое они установили на этом событии. Вы можете использовать AlarmManager, чтобы получить контроль над временем напоминания.Однако, в тот момент, есть две возможные ситуации:

  1. Деятельность ваших, которая имеет отношение к событию находится на переднем плане

  2. ничего, кроме # 1, которая будет включать в себя случаи где в момент возникновения напоминания о событии у вас нет процесса, и пользователь делает что-то еще со своим устройством, например, проезжает по дороге и использует навигационное приложение, чтобы помочь им.

Правильная вещь здесь - позволить ваша деятельность знает о событии, , если и только если эта деятельность находится на переднем плане. Если действие не обрабатывает событие, вы можете поднять Notification, чтобы сообщить пользователю о напоминании о календаре.

Самый простой способ выполнить это через шину событий, в которой действие реагирует на событие, или плакат события обрабатывает событие, если действие не отвечает. This directory содержит три примера приложений, реализующих этот шаблон для трех основных реализаций шины событий (LocalBroadcastManager, EventBus greenrobot и Otto Square).

+0

Хорошо, спасибо, и извините за неправильные указания. –

Смежные вопросы