0

У меня есть небольшой вопрос. Я устанавливал свои уведомления в определенное время с помощью AlarmManager. Время, в которое я устанавливал уведомления, хранится в базе данных SQLLite. Все они работают отлично, за исключением того, что я перезагружаю телефон. alarmManager теряет свои повторения, конечно.Установить аварийные сигналы после перезагрузки Телефон

Я хотел бы спросить, что является лучшим решением в этой ситуации? Я мой alarmManager установить в MainActivity и я установил мое уведомление внутри BroadcastReceiver как вы можете видеть в коде ниже:

Вот как я называю его от MainActivity:

 Intent intent = new Intent(context, MyReceiver.class); 
     intent.putExtra(EXTRA_TITLE, title); 
     intent.putExtra(EXTRA_COUNT, count); 
     PendingIntent pendingIntent = PendingIntent.getBroadcast(context, count, intent, PendingIntent.FLAG_CANCEL_CURRENT); 
     alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), WEEK_LENGTH_MS, pendingIntent); 

А вот метод передачи приемника OnReceive

public void onReceive(Context context, Intent intent) 
    { 
     nm = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); 
     CharSequence from = context.getString(R.string.app_name); 
     CharSequence message = intent.getStringExtra(DayActivity.EXTRA_TITLE); 
     Intent intentNotification = new Intent(context,DayActivity.class); 
     PendingIntent contentIntent = PendingIntent.getActivity(context, intent.getIntExtra(DayActivity.EXTRA_COUNT,0), intentNotification, 0); 
     Notification notif = new Notification(R.drawable.notification_logo,context.getString(R.string.app_name), System.currentTimeMillis()); 
     notif.setLatestEventInfo(context, from, message, contentIntent); 
     notif.defaults |= Notification.DEFAULT_LIGHTS; 
     notif.flags |= Notification.FLAG_AUTO_CANCEL | Notification.FLAG_SHOW_LIGHTS; 
     nm.notify(intent.getIntExtra(DayActivity.EXTRA_COUNT,0), notif); 

    } 

я заявляю BroadcastReceiver для BOOT_COMPLETED события, но он всегда вызывает только пустое уведомление в то время я запустить телефон и никогда больше.

ответ

1

Я хотел бы спросить, что является лучшим решением в этой ситуации?

Зарегистрировать BOOT_COMPLETEDBroadcastReceiver позвонить setRepeating() на AlarmManager восстановить свои графики.

Я объявляю событие BroadcastReceiver для события BOOT_COMPLETED, но он всегда вызывает только пустое уведомление в то время, когда я запускаю телефон и не больше.

Цель BOOT_COMPLETEDBroadcastReceiver должна перенести ваши сигналы тревоги. Возможно, вы захотите рассмотреть возможность использования отдельного BroadcastReceiver, чем тот, который вы используете для самих событий тревоги.

+0

Итак, вы говорите, что используете что-то вроде OnBootReceiver, где я получу время и используя alarmManager вызывают первый BroadcastReceiver? –

+1

@JanOmacka: Да. Вы можете использовать одну команду BroadcastReceiver для обеих ролей, но вам нужно будет различать событие загрузки и событие тревоги, например, исследуя строку действия входящего «Intent». Например, [это пример приложения] (https://github.com/commonsguy/cw-omnibus/tree/master/AlarmManager/WakeCast) использует этот подход, поскольку трансляция 'BOOT_COMPLETED' будет иметь действие, отличное от' null' string, в то время как явный 'Intent', который я использовал в' PendingIntent', с 'AlarmManager', будет иметь строку действия« null ». – CommonsWare

+0

Большое спасибо за вашу помощь. –

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