我设置了一个重复闹钟,我只想在设备醒来时关机。当它处于睡眠状态时,我希望它停止(并在设备唤醒时重新开启)。然而,无论如何,它目前都会消失。这是我如何注册我的警报:
Intent updateIntent = new Intent(UPDATE_INTENT);
AlarmManager alarmService = (AlarmManager) context.getSystemService(
Context.ALARM_SERVICE);
PendingIntent updatePendingIntent = PendingIntent.getBroadcast(context, 0,
updateIntent, PendingIntent.FLAG_UPDATE_CURRENT);
alarmService.setInexactRepeating(AlarmManager.RTC, Calendar.getInstance().getTimeInMillis(), UPDATE_INTERVAL, updatePendingIntent);
警报管理器文档说RTC不会唤醒设备。文档完全指定了我想要的行为:
Alarm time in System.currentTimeMillis() (wall clock time in UTC). This alarm does not wake the device up; if it goes off while the device is asleep, it will not be delivered until the next time the device wakes up.
当我按下设备上的锁定按钮时,我清楚地看到logcat中来自PowerManager的进入睡眠消息:
I/PowerManagerService(488): Going to sleep by user request...
然后我的闹钟响了。这里发生了什么?
具有讽刺意味的是,我在SO上发现的所有其他问题都会在设备处于睡眠状态时处理警报。我希望我有他们的问题!!
答案 0 :(得分:1)
然而,无论如何,它目前都会消失。
大概是其他东西拿着部分WakeLock
,并且设备实际上并没有睡着,即使屏幕可能已关闭。使用 adb shell dumpsys power
尝试跟踪它(查找"唤醒锁定"部分)。
答案 1 :(得分:0)
我最终决定注册广播接收器以侦听SCREEN_ON和SCREEN_OFF,并适当地切换警报。我意识到这可能不是超级优雅,但至少它总是有效,即使另一个应用程序正在进行唤醒锁定。
开启和关闭屏幕:android: broadcast receiver for screen on and screen off