为了在Android OS 6(也称作Marshmallow)中构建一个精确可靠的闹钟,我被迫使用AlarmManager的setAlarmClock方法。问题在于,该方法会在顶部状态栏显示一个闹钟图标。由于我的应用程序需要在每天午夜刷新一些数据,因此它将永远显示闹钟图标,这是不令人愉快的。
AlarmManager#setExactAndAllowWhileIdle
的文档:AlarmManager#setAlarmClock
文档中的内容:
因此,你只剩下以下两个选项:因此,这些类型的警报可能会极大地消耗电池电量,应仅用于其预期目的。
AlarmManager#setExactAndAllowWhileIdle
并接受最多15分钟的延迟AlarmManager#setAlarmClock
并接受闹钟您需要使用setExactAndAllowWhileIdle()
。如果您的应用程序没有忽略优化,您只有10秒钟来完成目标。如果您需要更多时间,需要添加权限请求要求用户忽略优化,或者添加部分唤醒锁和/或互联网访问。
setExactAndAllowWhileIdle()
有一个问题,我不能在15分钟内有两个连续的闹钟,因为SDK是这样说的。 - AVEbrahimiAlarmManager
在午夜时刻安排一个任务,而不显示 UI 时钟。你可以使用 AlarmManager#set
来实现,这样就不会显示时钟了。例如: alarm.set(
AlarmManager.RTC_WAKEUP,
midnightInMillis,
PendingIntent.getService(getApplicationContext(), 11, intent, PendingIntent.FLAG_UPDATE_CURRENT)
);