我正在尝试停止重复报警。我已经在网上寻找解决方案,但是我的代码似乎还不错...仍然不能停止警报...这是一些代码(FM是文件写入对象)
public void StartAlarm() {
Intent intent = new Intent(getApplicationContext(), AlarmReciever.class);
PendingIntent sender = PendingIntent.getBroadcast(getApplicationContext(), 0, intent, 0);
AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
Calendar alarm = Calendar.getInstance();
alarm.setTimeInMillis(System.currentTimeMillis());
alarm.set(Calendar.HOUR_OF_DAY, 15);
alarm.set(Calendar.MINUTE, 0);
long alarmCal=alarm.getTimeInMillis();
if (alarmCal<=new Date().getTime()) {
alarm.add(Calendar.DAY_OF_MONTH, 1);
}
am.setRepeating(AlarmManager.RTC_WAKEUP, alarm.getTimeInMillis(), AlarmManager.INTERVAL_DAY, sender);
FM.Write("startAlarm()");
}
public void StopAlarm() {
if (isAlarmRunning()) {
Intent intent = new Intent(getApplicationContext(), AlarmReciever.class);
PendingIntent sender = PendingIntent.getBroadcast(getApplicationContext(), 0, intent, 0);
AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);
alarmManager.cancel(sender);
FM.Write("alarm canceled");
isAlarmRunning();
}
public boolean isAlarmRunning() {
Intent intentToCheck = new Intent(getApplicationContext(),AlarmReciever.class);
boolean alarm = PendingIntent.getBroadcast(getApplicationContext(), 0, intentToCheck,
PendingIntent.FLAG_NO_CREATE) != null;
FM.Write("alarm = "+alarm);
if (!alarm) {
return false;
}
else
return true;
}
谢谢!
PendingIntent sender = PendingIntent.getBroadcast(getApplicationContext(), 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
PendingIntent
(相同的意图,相同的标志)来停止警报,并且它确实可以工作。顺便说一句,您的isAlarmRunning()
方法检查是否存在PendingIntent
,这与正在注册的警报不同。即使删除了警报,它也可能返回true
。 ToggleButton
是否处于活动状态来设置PendingIntent
。这与警报是否仍然注册有所不同。并且要同时匹配这两个条件,必须同时取消它们;即取消警报,然后取消PendingIntent
。
Intent intent = new Intent(getApplicationContext(), AlarmReciever.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(getApplicationContext(), 0, intent, PendingIntent.FLAG_NO_CREATE);
myToggleButton.setChecked(pendingIntent != null);
// Setting the alarm
AlarmManager alarmManager = (AlarmManager) this.getSystemService(ALARM_SERVICE);
alarmManager.setRepeating();
// Canceling the alarm
alarmManager.cancel(pendingIntent);
// canceling the pendingIntent
PendingIntent.getBroadcast(getApplicationContext(), 0, intent, PendingIntent.FLAG_NO_CREATE).cancel();