как установить несколько аварийных сигналов с помощью диспетчера аварийных сигналов 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);
в моем приложении пользователь может выбрать дни (воскресенье, понедельник …), чтобы повторять тревогу еженедельно. Я пытаюсь создать несколько сигналов тревоги, чтобы повторять еженедельно, но не знаю, как это сделать. могу ли я создать его с использованием (повторить) интервала или создать несколько диспетчеров аварийных сигналов?
- Как нарисовать округленный прямоугольник в Android UI?
- Drawable-hdpi, Drawable-mdpi, Drawable-ldpi Android
- Кэш зависимостей Gradle может быть поврежден (это иногда происходит после таймаута сетевого соединения).
- Как создать EditText с помощью кнопки cross (x) в конце?
- Как отправлять и получать SMS-сообщения с данными
- android: windowSoftInputMode = "adjustResize" не имеет никакого значения?
- Android: добавление текстового представления в линейный макет программно
- Отправить SMS в android
- Как использовать ADB в Android Studio для просмотра SQLite DB
- Настроить adb на Mac OS X
- Опубликованные данные UTF-8 на сервер теряют определенные символы
- Есть ли способ определить высоту экрана в андроиде в сантиметрах или дюймах?
- как создать APK и отдельные библиотеки, которые приложение загружает динамически
Вам нужно использовать 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); }