2017-02-07 3 views
0

Мне нужно передать контекст деятельности onReceive из MyAlarmReceiver extends BroadcastReceiver класс. Для этого я перехожу контекст при установке намерения:Как передать контекст в BroadcastReceiver?

myAlarmManager.set(AlarmManager.RTC_WAKEUP, d.getTime(), 
    PendingIntent.getBroadcast(MainActivity.this, 1, 
    myIntentAlarm, PendingIntent.FLAG_ONE_SHOT)); 

Однако контекст, в onReceive не то же самое, как один проходил в myAlarmManager. Зачем?

+0

что вы хотите добиться от этого? –

+0

Nayan Srivastava, спасибо за быстрый ответ. Мне нужно передать этот контекст другому методу, и этот контекст используется для создания и отображения _ ** AlertDialog ** ._ – Spectorsky

+0

ОК, имеет смысл, но это невозможно сразу. скорее открыть новую деятельность с диалоговой темой. –

ответ

1

Context, предоставленный BroadcastReceiver, не совпадает с тем, что используется для создания BroadcastReceiver или что-нибудь еще, что вы можете изменить. Это ограниченный вариант Context, который преднамерен каркасом. Если у вас есть что-то важное для вашего BroadcastReceiver, вам нужно запустить свой собственный Service или использовать какой-либо другой механизм для его запуска.

0

и там этот контекст используется для создания и показать AlertDialog

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

Помимо этого, вы не можете полагаться на свой экземпляр MainActivity, чтобы существовать больше в момент срабатывания будильника. В конце концов, должно быть довольно очевидно, что если вы планируете возникновение тревоги через неделю, ваш исходный экземпляр активности будет давно уничтожен.

Вы можете отправить мероприятие на автобусе событий (LocalBroadcastManager, eventBus greenrobot и т. Д.). Таким образом, если у вас есть do, у вас есть интерфейс на переднем плане, он может отображать диалог. И, если у вас нет, то на переднем плане появился пользовательский интерфейс, вы можете сделать что-то еще (например, отобразить Notification). У меня есть примеры приложений, которые показывают это for LocalBroadcastManager и for greenrobot's EventBus.

+0

Спасибо за ценное предложение. Ожидается, что моя тревога будет запланирована на <= 1 день, но, хотя я и не подозреваю о будущей судьбе своей деятельности. Возможно, стоит упомянуть «Уведомление». – Spectorsky

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