Как установить более одного сигнала тревоги одновременно в 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); } 
Intereting Posts
Поворот макета и после размещения в relativeLayout prblem Не удалось загрузить apk в Crashlytics Скользящее меню блокирует событие касания в верхнем виде Получить измеренный размер и положение растрового изображения на холсте после 2D преобразования Как я могу отображать живые обои пользователя в качестве фона в моем приложении? Gridview изображений не обновляется BigDecimal предоставляет NumberFormatException в Android 4.0.3 с локализацией Приоритет уклонения Android TextView или сопротивление сжатию Метод HttpTransportSe.call () занимает минуту для вызова веб-службы Android Sqlite SQLiteDiskIOException: ошибка ввода-вывода диска (код 1290) SQLITE_IOERR_DIR_FSYNC Android: как получить пользовательский XML признанный Android 2.1: Шифрование Bluetooth Перенос всех пользователей моего платного приложения на покупку в приложении Как обернуть содержимое, как изображение, кнопку внутри макетов Android? Android Nkzawa SocketIO отключается и устанавливает новое соединение