我使用它创建了一个警报AlarmManager.setAlarmClock(AlarmClockInfo, pendingIntent)并且它有效。系统还在屏幕的右上角显示闹钟。
到目前为止,一切都很好,但是我怎样才能取消那个警报呢?我尝试使用AlarmManager.cancel(),但右上角的图标仍然存在。任何想法?假设用户不想再安排任务,所以图标应该消失......
提示:Cancel() 似乎会取消由 Set、SetExact、SetAllowWhileIdle...以及所有这些创建的警报。但这里我谈论的是 setAlarmClock(),这是一个不同的故事。
我很难使无线电闹钟按预期工作,并且在这里我已经阅读了很多有关该主题的主题,但是很遗憾,没有一个主题对我有帮助。
AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
Intent intent = new Intent(this, AlarmReceiver.class);
PendingIntent penInt = PendingIntent.getBroadcast(this, intentId, intent, 0);
Run Code Online (Sandbox Code Playgroud)
我在stackoverflow上找到的API级别之间的这种区分方法,将其放入我的calcNextAlarm()函数中(加上一些调试日志消息),无论设备上使用什么API,都可以正确设置警报:
// problems in doze mode api 23+
if (Build.VERSION.SDK_INT >= 23) {
if (testMode) Log.d("Ben", "setAlarmClock() - API 23+");
am.setAlarmClock(new AlarmManager.AlarmClockInfo(alarmTimeInMillis, penInt), penInt);
}
else if (Build.VERSION.SDK_INT >= 19) {
// Wakes up the device in Idle Mode
if (testMode) Log.d("Ben", "setExact() - API >= 19 && API < 23");
am.setExact(AlarmManager.RTC_WAKEUP, alarmTimeInMillis, penInt);
}
// Old APIs
else …Run Code Online (Sandbox Code Playgroud)