Android 报警管理器不能取消

Android 报警管理器不能取消,android,alarmmanager,Android,Alarmmanager,我有三个报警管理器在一天的不同时间创建三个报警。这些报警位于mainactivity的oncreate方法中。我希望这些警报只在应用程序第一次启动时设置。但是因为它们位于主活动的oncreate方法中。每次我的主要活动被重新创建时,它们都会被重新创建。我如何解决这个问题?此外,我希望即使我的主要活动未处于活动状态或处于焦点状态,也能触发警报 此外,我希望在特定的时间窗口内,每天在不同的时间重复这些警报。setRepeatingAlarm方法没有给我这种灵活性。关于我如何做到这一点有什么想法吗 I

我有三个报警管理器在一天的不同时间创建三个报警。这些报警位于mainactivity的oncreate方法中。我希望这些警报只在应用程序第一次启动时设置。但是因为它们位于主活动的oncreate方法中。每次我的主要活动被重新创建时,它们都会被重新创建。我如何解决这个问题?此外,我希望即使我的主要活动未处于活动状态或处于焦点状态,也能触发警报

此外,我希望在特定的时间窗口内,每天在不同的时间重复这些警报。setRepeatingAlarm方法没有给我这种灵活性。关于我如何做到这一点有什么想法吗

Intent intent1 = new Intent(this, ReminderAlarmReceiver.class);
intent1.putExtra("alarm_message", "Alarm!");
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 1, intent1,  PendingIntent.FLAG_NO_CREATE);

Intent intent2 = new Intent(this, ReminderAlarmReceiver.class);
intent2.putExtra("alarm_message", "Alarm!");
PendingIntent pendingIntent2 = PendingIntent.getBroadcast(this, 2, intent2, PendingIntent.FLAG_NO_CREATE);

Intent intent3 = new Intent(this, EODAlarmReceiver.class);
intent3.putExtra("alarm_message", "Alarm!");    
PendingIntent pendingIntent3 = PendingIntent.getBroadcast(this, 3, intent3, 0);

// Get the AlarmManager service
AlarmManager alarmMgr1 = (AlarmManager) getSystemService(ALARM_SERVICE);
alarmMgr1.set(AlarmManager.RTC_WAKEUP, cal0.getTimeInMillis(), pendingIntent);

AlarmManager alarmMgr2 = (AlarmManager) getSystemService(ALARM_SERVICE);
alarmMgr2.set(AlarmManager.RTC_WAKEUP, cal2.getTimeInMillis(), pendingIntent2);        

AlarmManager alarmMgr3 = (AlarmManager) getSystemService(ALARM_SERVICE);
alarmMgr3.set(AlarmManager.RTC_WAKEUP, cal4.getTimeInMillis(), pendingIntent3);

您不应该在活动的onCreate方法中设置报警,而应该创建一个单独的类,如图所示。这也可以解决当你的活动失去焦点时的问题


此外,对于设置重复报警,您应该能够使用AlarmManager的
setRepeating()
方法进行设置

谢谢,这很有帮助。尽管如此,我不能完全按照我想要的方式使用alarm manager的setRepeating()方法。@Rahin在这里链接的答案中,每次创建活动时都会运行代码。如果活动完成,它将再次运行代码。我不认为这是OP想要的。