Как установить несколько аварийных сигналов с помощью диспетчера аварийных сигналов Android

Я создаю аварийное приложение. Я успешно реализовал основные функции будильника.

Calendar calendar = Calendar.getInstance(); calendar.set(calendar.HOUR_OF_DAY, sHour); calendar.set(calendar.MINUTE, sMin); calendar.set(calendar.SECOND, 0); calendar.set(calendar.MILLISECOND, 0); long sdl = calendar.getTimeInMillis(); Intent intent = new Intent(AlarmList.this, AlarmReceiver.class); PendingIntent sender = PendingIntent.getBroadcast(AlarmList.this, 0, intent,PendingIntent.FLAG_UPDATE_CURRENT); AlarmManager ALARM1 = (AlarmManager)getSystemService(ALARM_SERVICE); ALARM1.set(AlarmManager.RTC_WAKEUP, sdl, sender); 

В моем приложении пользователь может выбрать дни (воскресенье, понедельник …), чтобы повторять сигнал тревоги еженедельно. Я пытаюсь создать несколько сигналов тревоги, чтобы повторять еженедельно, но не знаю, как это сделать. Могу ли я создать его с использованием (повторить) интервала или создать несколько диспетчеров аварийных сигналов?

Solutions Collecting From Web of "Как установить несколько аварийных сигналов с помощью диспетчера аварийных сигналов Android"

Вам нужно использовать different Broadcast id's для pending intents . Что-то вроде этого:

  Intent intent = new Intent(load.this, AlarmReceiver.class); final int _id = (int) System.currentTimeMillis(); PendingIntent appIntent = PendingIntent.getBroadcast(this, _id, intent,PendingIntent.FLAG_ONE_SHOT); 

Использование системного времени должно быть уникальным идентификатором для каждого ожидающего вас намерения.

Из документов :

Если для этого намерения уже есть сигнал тревоги (при равенстве двух намерений, определяемых filterEquals (Intent) , он будет удален и заменен этим

Несколько AlarmManagers не смогут решить вашу проблему. Если у них есть несколько разных аварийных сигналов (разные времена и разные дни), вам необходимо установить будильник в BroadcastReceiver каждый раз, когда вы запускаете предыдущий аварийный сигнал.

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

Чтобы установить несколько аварийных сигналов, вам нужно каждый раз определять свое Intent чтобы оно отличалось от других. Самый простой способ найти это – установить поле данных вашего Intent следующим образом:

 // give your alarm an id and save it somewhere // in case you want to cancel it in future String myAlarmId = ...; // create your Intent Intent intent = new Intent(AlarmList.this, AlarmReceiver.class); intent.setData(Uri.parse("myalarms://" + myAlarmId)); ... 

Остальная часть вашего кода @ Hassy31 прекрасна, как есть, и остается неизменной.

Обратите внимание, что параметр PendingIntent.getBroadcast() методе PendingIntent.getBroadcast() (как предложено @parag) не используется в соответствии с документацией, поэтому это неправильный способ сделать это.

Установить id Broadcast для ожидания

 for (int id = 0; id < 3; id++) { // Define pendingintent PendingIntent pendingIntent = PendingIntent.getBroadcast(this, id,ntent, 0); // set() schedules an alarm alarmManager.set(AlarmManager.RTC_WAKEUP, alertTime, pendingIntent); }