У меня есть небольшой вопрос. Я устанавливал свои уведомления в определенное время с помощью 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 события, но он всегда вызывает только пустое уведомление в то время я запустить телефон и никогда больше.
Итак, вы говорите, что используете что-то вроде OnBootReceiver, где я получу время и используя alarmManager вызывают первый BroadcastReceiver? –
@JanOmacka: Да. Вы можете использовать одну команду BroadcastReceiver для обеих ролей, но вам нужно будет различать событие загрузки и событие тревоги, например, исследуя строку действия входящего «Intent». Например, [это пример приложения] (https://github.com/commonsguy/cw-omnibus/tree/master/AlarmManager/WakeCast) использует этот подход, поскольку трансляция 'BOOT_COMPLETED' будет иметь действие, отличное от' null' string, в то время как явный 'Intent', который я использовал в' PendingIntent', с 'AlarmManager', будет иметь строку действия« null ». – CommonsWare
Большое спасибо за вашу помощь. –