Подтвердить что ты не робот

Как установить несколько аварийных сигналов с помощью диспетчера аварийных сигналов 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);

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

4b9b3361

Ответ 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);
}