【发布时间】:2016-07-05 14:08:49
【问题描述】:
我有两个闹钟 1.步行提醒 2.提示通知 用户可以取消,步行提醒。取消过程正常。
private void setWalkReminder(){
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, 18);
calendar.set(Calendar.MINUTE, 50);
calendar.set(Calendar.SECOND, 0);
Intent walkIntent = new Intent(this, AlarmReceiver.class);
Log.d(TAG, "Started WALK SET");
walkIntent.putExtra("alarmType", "walkReminder");
PendingIntent walkPendingIntent = PendingIntent.getBroadcast(this, WALK_REMINDER, walkIntent, PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager walkAlarmManager = (AlarmManager) this.getSystemService(ALARM_SERVICE);
walkAlarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 180000 /*AlarmManager.INTERVAL_DAY*/, walkPendingIntent);
workoutEditor = workoutPrefs.edit();
workoutEditor.putBoolean("walkReminderIsSet", true);
workoutEditor.commit();
}
private void cancelWalkReminder(){
Intent walkIntent = new Intent(this, AlarmReceiver.class);
PendingIntent walkPendingIntent = PendingIntent.getBroadcast(this, WALK_REMINDER, walkIntent, PendingIntent.FLAG_UPDATE_CURRENT);
Log.d(TAG, "Walk Canceled");
AlarmManager walkAlarmManager = (AlarmManager) this.getSystemService(ALARM_SERVICE);
walkAlarmManager.cancel(walkPendingIntent);
}
我正在检查是否通过以下方法设置了闹钟:
boolean walkAlarmDown = (PendingIntent.getBroadcast(this, WALK_REMINDER,
new Intent(this, AlarmReceiver.class), PendingIntent.FLAG_NO_CREATE) == null);
if (walkAlarmDown && workoutPrefs.getBoolean("walkReminderIsNeeded", true)){
Log.d(TAG, "WALK REMINDER SET");
setWalkReminder();
} else if (!walkAlarmDown && !workoutPrefs.getBoolean("walkReminderIsNeeded", true)){
Log.d(TAG, "WALK REMINDER CANCELED");
cancelWalkReminder();
} else {
if(!workoutPrefs.getBoolean("walkReminderIsNeeded", true) && walkAlarmDown){
Log.d(TAG, "Why is this false?");
} else if (!walkAlarmDown && workoutPrefs.getBoolean("walkReminderIsNeeded", true)){
Log.d(TAG, "proper functioning");
}
}
如果用户在取消后重新启用提醒,则提醒不会再次设置。 Log.d 输出为proper functioning。这是因为 walkAlarmDown 仍然给出错误。我相信这是因为当警报被取消时 walkAlarmDown 没有变为真。取消警报时,如何确保 walkAlarmDown 变为 true?
或者,是否因为我的其他警报已启用而保持真实?因此,只有一个警报被取消,而另一个警报保持活动状态。它有不同的广播请求代码。所以我认为这应该不是问题。
【问题讨论】:
标签: android alarmmanager android-alarms