Из того, что я понимаю, при планировании тревоги с помощью диспетчера тревог вы должны предоставить экземпляр PendingIntent.
Существует два типа тревог, которые проснутся и сработают, даже если телефон спит или заблокирован, и те, которые не будут.
Кроме того, если вам нужно было запланировать 10 вещей одновременно, AlarmManager заменит существующее запланированное отложенное намерение новым, если вы не выполняли другие намеренные действия. Когда я использую сигналы тревоги, я всегда использовал базу данных sqlite для постановки в очередь заданий, которые я хотел выполнить по какому-то расписанию. Оттуда я планировал по одному сигналу за раз, потому что все они выполняли одно и то же намерение, когда зуммер отключился.
Дополнительный EXTRA_ALARM_COUNT вступит в игру, если у вас запланирован повторяющийся сигнал тревоги, и он несколько раз гаснет, когда пользовательское устройство спит. Когда телефон проснется, он воспроизведет все, что было поставлено в очередь в прошлом. В этом случае ваше ожидающее намерение сработает и будет иметь значение, сколько раз ваш Alarm был пропущен, потому что он был создан с типом RTC или ELAPSED_REALTIME при вызове метода set.
Вот пример того, как я обычно взаимодействую с AlarmManger
protected void scheduleNext(Context context) {
AlarmManager alarmManager = getAlarmManager();
Intent intent = new Intent(MyIntent.ACTION_DO_WORK);
PendingIntent pendingIntent = PendingIntent.getService(context, 0, intent, 0);
String where = Queue.SCHEDULED_DATE + "= (select min(" + Queue.SCHEDULED_DATE + ") from queue where " + Queue.COMPLETED_DATE + " is null)";
Cursor cursor = context.getContentResolver().query(Queue.CONTENT_URI, Queue.PROJECTION, where, null, null);
if (cursor.moveToFirst()) {
int id = cursor.getInt(cursor.getColumnIndex(Queue._ID));
long when = cursor.getLong(cursor.getColumnIndex(Queue.SCHEDULED_DATE));
alarmManager.set(AlarmManager.RTC_WAKEUP, when, pendingIntent);
}
cursor.close();
}