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

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

Вам нужно использовать 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); } 
  • android: удаление изображения
  • Как программно удалить базу данных SQLite из Android
  • удалите прописку вокруг значка действия слева на Android 4.0+
  • Когда запускается SQLiteOpenHelper onCreate () / onUpgrade ()?
  • Как проверить, включены ли службы определения местоположения?
  • ActionBar в диалоговом окне диалога
  • Как использовать веб-камеру в эмуляторе Android для захвата живого изображения?
  • SQLite с Android NDK
  • twitter4j => AndroidRuntime (446): java.lang.NoClassDefFoundError: twitter4j.http.AccessToken
  • Получить доступ root через su в эмуляторе Android
  • Не удалось импортировать новый проект Gradle: не удалось найти версию Build Tools * .0.0
  • Давайте будем гением компьютера.