Intereting Posts
Android: использование матрицы для рисования растровых изображений Как узнать, почему файл «R» (ресурс) не сгенерирован? Android: используйте значок в качестве кнопки «Назад», не перезагружая предыдущую активность. Отсутствующие кнопки диалога под Android 7.1.1 Установка google_app_id без google_play_services.json или gradle Максимальный предел символов EditText превысил обратный вызов Невозможно преобразовать объект типа java.util.ArrayList, чтобы ввести модель Не удается подключить отладчик Android Studio к процессу Android Как автоматическое изменение размера, совместимость, настройка размера экрана для всех устройств Android Android: проверьте имя учетной записи устройства google на сервере Как включить Пробуждение в вариантах разработчика с использованием АБР? Метрики памяти в приложениях для Android BetterPickers без библиотеки поддержки Добавить неопределенный горизонтальный ход в панель действий Pinch Увеличить веб-обзор

Как установить более одного сигнала тревоги одновременно в Android?

Я делаю небольшое приложение, где мне приходится устанавливать будильник из массива, но устанавливается только один сигнал тревоги и работает в то время, которое находится в последней позиции массива, почему он ведет себя следующим образом: это мой код

AlarmManager[] alarmManager=new AlarmManager[24]; for(f=0;f<arr2.length;f++) { Intent intent = new Intent(AlarmR.this, Riciving.class); pi=PendingIntent.getBroadcast(AlarmR.this, 0,intent, 0); alarmManager[f] = (AlarmManager) getSystemService(ALARM_SERVICE); alarmManager[f].set(AlarmManager.RTC_WAKEUP,arr2[f] ,pi); } 

Заранее спасибо

На вашем pendingIntent вам нужно установить второй requestCode на уникальный номер. Я обычно запускаю массив через цикл for и динамически устанавливаю код запроса для каждого элемента массива. Без requestCode аварийные сигналы переписывают друг друга.

 AlarmManager[] alarmManager=new AlarmManager[24]; intentArray = new ArrayList<PendingIntent>(); for(f=0;f<arr2.length;f++){ Intent intent = new Intent(AlarmR.this, Riciving.class); pi=PendingIntent.getBroadcast(AlarmR.this, f,intent, 0); alarmManager[f] = (AlarmManager) getSystemService(ALARM_SERVICE); alarmManager[f].set(AlarmManager.RTC_WAKEUP,arr2[f] ,pi); intentArray.add(pi); } 

В принципе, вы просто хотите изменить requestCode на динамический номер. Установив его в f вы даете ему новый уникальный идентификатор для каждого элемента массива. Имейте в виду, что если вы хотите отменить аварийные сигналы, вам нужно будет использовать другой цикл и отменить каждый отдельно. Я лично добавляю все свои тревоги в свой собственный массив, чтобы я мог обрабатывать их отдельно.

Затем, если вам нужно отменить их:

  private void cancelAlarms(){ if(intentArray.size()>0){ for(int i=0; i<intentArray.size(); i++){ alarmmanager.cancel(intentArray.get(i)); } intentArray.clear(); } } 

Если вы хотите установить несколько аварийных сигналов (повторяющихся или одиночных), вам просто нужно создать их PendingIntents с помощью другого requestCode. Если requestCode тот же, то новый будильник перезапишет старый.

Вот код для создания нескольких одиночных аварийных сигналов и сохранения их в ArrayList. Я сохраняю PendingIntent в массиве, потому что это то, что вам нужно, чтобы отменить будильник. // контекстная переменная содержит ваш Context

 AlarmManager mgrAlarm = (AlarmManager) context.getSystemService(ALARM_SERVICE); ArrayList<PendingIntent> intentArray = new ArrayList<PendingIntent>(); for(i = 0; i < 10; ++i) { Intent intent = new Intent(context, OnAlarmReceiver.class); // Loop counter `i` is used as a `requestCode` PendingIntent pendingIntent = PendingIntent.getBroadcast(context, i, intent, 0); // Single alarms in 1, 2, ..., 10 minutes (in `i` minutes) mgrAlarm.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() + 60000 * i, pendingIntent); intentArray.add(pendingIntent); }