У меня есть класс Alarms.java, где я реализовал методы для установки и закрытия тревоги. Похоже:
public class Alarms {
private Context context;
private DevicesTable devicesTable;
private ArrayList<DeviceItem> deviceItems;
private ArrayList<AlarmManager> managerArrayList;
private final String TAG = "ALARMTEST";
public Alarms(Context context) {
this.context = context;
this.devicesTable = new DevicesTable(context);
this.deviceItems = devicesTable.fetchAllRecords();
this.managerArrayList = new ArrayList<>();
}
public void setAlarm() {
// checking all schedules for every device
// ONLY FOR START
for (final DeviceItem deviceItem : this.deviceItems) {
for (final ScheduleItem scheduleItem : deviceItem.getScheduleItems()) {
Intent intent = new Intent(this.context, AlarmBroadcastReceiver.class);
intent.putExtra("DeviceItem", deviceItem.getPhone());
intent.putExtra("ScheduleItem", scheduleItem.getId());
intent.putExtra("TAG", "START-AUTO");
final int _id = deviceItem.getId() * 10 + scheduleItem.getId();
PendingIntent pendingIntent = PendingIntent.getBroadcast(this.context, _id, intent, 0);
AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
if (alarmManager != null) {
alarmManager.setRepeating(
AlarmManager.RTC_WAKEUP,
scheduleItem.getStartCalendar(deviceItem.getWorking_time()).getTimeInMillis(),
AlarmManager.INTERVAL_DAY, // scheduled daily, it easier to do
pendingIntent);
this.managerArrayList.add(alarmManager);
}
}
}
Log.d(TAG, "setAlarm");
}
public void cancelAlarm(int device_item_id, int schedule_item_id) {
AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(this.context, AlarmBroadcastReceiver.class);
final int _id = device_item_id * 10 + schedule_item_id;
PendingIntent pendingIntent = PendingIntent.getBroadcast(this.context, _id, intent, 0);
if (alarmManager != null) {
alarmManager.cancel(pendingIntent);
Log.d(TAG, "cancelled alarm for device id: " + device_item_id + " schedule id: " + schedule_item_id);
}
}
}
Некоторые случаи для этого. Когда я создаю один сигнал тревоги, он работает отлично, он включается в указанное время. Когда я создаю два будильника, он также отлично работает, а также включается в указанное время. Итак, когда я создаю два сигнала тревоги и удаляю первый сигнал тревоги, тогда мой BroadcastReceiver не работает или мой второй сигнал тревоги задерживается на 10-15 минут. Каждый идентификатор уникален, я проверил это. Я не знаю, как это исправить. У кого-то есть такая же проблема? Я пытался вызвать setAlarm на cancelAlarm void, и я получил те же результаты, но он не работает.