如何防止屏幕关闭时触发警报?
How to prevent triggering alarm when screen is off?
我试图在特定时间间隔内触发警报 仅当设备处于唤醒状态时,这是我用来实现此目的的代码:
AlarmManager alarmManager = (AlarmManager) context.getSystemService(ALARM_SERVICE);
alarmManager.setInexactRepeating(AlarmManager.ELAPSED_REALTIME,
SystemClock.elapsedRealtime(),
INTERVAL_ONE_MINUTE,
pi);
考虑到有关 AlarmManager.ELAPSED_REALTIME android 的文档不应该在设备屏幕关闭时触发警报(如果我没记错的话)
Alarm time in SystemClock.elapsedRealtime() (time since boot, including sleep). 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
出乎我的意料,系统在屏幕关闭时触发了警报,我是不是漏掉了什么?
你为什么不使用
protected void onPause();
在那里开火
pi.cancel();
alarmManager.cancel(pi);
当他们说设备要休眠时,这并不意味着屏幕已关闭。
参见:When does android device go to sleep mode?
参见:http://developer.android.com/training/scheduling/wakelock.html
当设备的屏幕未打开时,它仍会不时被唤醒以执行操作。为了省电,它会休眠,但应用程序不可避免地会唤醒它来做事。
您可以检查屏幕是否打开:How can I tell if the screen is on in android?
您引用的文档只是说当使用 ELAPSED_REALTIME 时设备进入睡眠状态时不会触发警报。
听起来您希望在应用程序进程仍处于活动状态时触发警报。您可能会考虑使用 ActivityLicecycleCallbacks:
http://developer.android.com/reference/android/app/Application.ActivityLifecycleCallbacks.html
这将使您 schedule/cancel 基于流程生命周期的警报,而不是单一的 activity。
你也可以看看
Application.onTrimMemory
查看它何时被 OS 调用。您可能会发现在那里取消闹钟有些用处。
我试图在特定时间间隔内触发警报 仅当设备处于唤醒状态时,这是我用来实现此目的的代码:
AlarmManager alarmManager = (AlarmManager) context.getSystemService(ALARM_SERVICE);
alarmManager.setInexactRepeating(AlarmManager.ELAPSED_REALTIME,
SystemClock.elapsedRealtime(),
INTERVAL_ONE_MINUTE,
pi);
考虑到有关 AlarmManager.ELAPSED_REALTIME android 的文档不应该在设备屏幕关闭时触发警报(如果我没记错的话)
Alarm time in SystemClock.elapsedRealtime() (time since boot, including sleep). 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
出乎我的意料,系统在屏幕关闭时触发了警报,我是不是漏掉了什么?
你为什么不使用
protected void onPause();
在那里开火
pi.cancel();
alarmManager.cancel(pi);
当他们说设备要休眠时,这并不意味着屏幕已关闭。
参见:When does android device go to sleep mode?
参见:http://developer.android.com/training/scheduling/wakelock.html
当设备的屏幕未打开时,它仍会不时被唤醒以执行操作。为了省电,它会休眠,但应用程序不可避免地会唤醒它来做事。
您可以检查屏幕是否打开:How can I tell if the screen is on in android?
您引用的文档只是说当使用 ELAPSED_REALTIME 时设备进入睡眠状态时不会触发警报。
听起来您希望在应用程序进程仍处于活动状态时触发警报。您可能会考虑使用 ActivityLicecycleCallbacks: http://developer.android.com/reference/android/app/Application.ActivityLifecycleCallbacks.html
这将使您 schedule/cancel 基于流程生命周期的警报,而不是单一的 activity。
你也可以看看
Application.onTrimMemory
查看它何时被 OS 调用。您可能会发现在那里取消闹钟有些用处。