Насколько я понимаю, при планировании тревоги с помощью диспетчера тревог вы должны предоставить экземпляр PendingIntent.
Есть два типа будильников: одни просыпаются и работают, даже если телефон спит или заблокирован, а другие нет.
Кроме того, если вы должны были запланировать 10 событий одновременно, AlarmManager заменит существующее намерение Scheduled Pending новым, если только вы не назначали ему другие действия намерения. Когда я использую Alarms, я всегда использовал базу данных sqlite для постановки в очередь заданий, которые я хотел выполнить по какому-то расписанию. Оттуда я планировал один будильник за раз, потому что все они выполняли одно и то же намерение, когда звонил зуммер.
Дополнительный EXTRA_ALARM_COUNT будет иметь значение, если вы запланировали повторяющийся будильник, и он срабатывал несколько раз, когда пользовательское устройство спало. Когда телефон проснется, он воспроизведет все, что было поставлено в очередь в прошлом. В этом случае ваше ожидающее намерение сработает и будет иметь значение, равное тому, сколько раз ваш будильник был пропущен, потому что он был создан с использованием 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();
}
person
Michael
schedule
12.12.2010