Как установить несколько аварийных сигналов с помощью диспетчера аварийных сигналов 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);
в моем приложении пользователь может выбрать дни (воскресенье, понедельник...), чтобы повторять тревогу еженедельно.
Я пытаюсь создать несколько сигналов тревоги, чтобы повторять еженедельно, но не знаю, как это сделать.
могу ли я создать его с использованием (повторить) интервала или создать несколько диспетчеров аварийных сигналов?
Ответы
Ответ 1
Вам нужно использовать 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);
Использование системного времени должно быть уникальным идентификатором для каждого ожидающего ожидания
заставляя вас стрелять.
Ответ 2
От документы:
Если для этого запланированного намерения уже есть сигнал тревоги (с равенство двух намерений определяется filterEquals (Intent), затем он будет удален и заменен на этот
Несколько AlarmManagers
не решит вашу проблему. Если у них есть несколько различных аварийных сигналов (разные времена и разные дни), тогда вам нужно будет установить будильник в пределах BroadcastReceiver
каждый раз, когда вы запускаете предыдущий аварийный сигнал.
Вам также нужно будет удерживать RECEIVE_BOOT_COMPLETED
и иметь BroadcastReceiver
для получения загрузки, чтобы, если телефон перезагружен, вы можете перепланируйте свои аварийные сигналы.
Ответ 3
Чтобы установить несколько аварийных сигналов, вам нужно каждый раз определять ваш Intent
, чтобы он отличался от других. Самый простой способ найти это: установить поле data
вашего 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 прекрасна как есть и остается неизменной.
Обратите внимание, что параметр requestCode
в методе PendingIntent.getBroadcast()
(как предложено @parag) не используется в соответствии с документацией, поэтому это неправильный способ сделать это.
Ответ 4
установить широковещательный id
для pendingIntent
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);
}