gpt4 book ai didi

android - 使用标志 ON_AFTER_RELEASE 释放唤醒锁的问题

转载 作者:行者123 更新时间:2023-12-05 05:27:18 27 4
gpt4 key购买 nike

我有一项服务需要在服务中发生某些事情(没有用户交互)时延长系统屏幕开启超时。理想情况下,我可以重置“用户 Activity 计时器”使用 PowerManager 的 userActivity(长时, bool 值 noChangeLights)方法。但是,这需要只有系统应用才能被授予的权限。

所以,我所做的是获取带有 ON_AFTER_RELEASE 标志的 SCREEN_BRIGHT_WAKE_LOCK 唤醒锁。根据文档,使用此标志“当释放 WakeLock 时,用户 Activity 计时器将被重置,导致照明保持更长的时间”。

这行得通,但我遇到了一些问题。

1) 如果在默认屏幕超时后释放唤醒锁,屏幕将不再变暗。示例:屏幕超时为 15 秒。该服务保持唤醒锁 30 秒,然后释放它,导致屏幕多停留 15 秒。屏幕会在 15 秒后关闭,不会像往常一样先变暗。

2) 如果在屏幕变暗并即将熄灭时释放唤醒锁,有时它会亮一秒钟然后立即再次变暗(而不是从暗中出来直接变亮)。如果在调光期间多次获取和释放唤醒锁,这种情况可能会快速发生多次,导致屏幕闪烁。

我怎样才能实现我真正想要的,即重置“用户 Activity 计时器”,就像用户触摸了设备一样?

最佳答案

对于您的 1),首先它取决于设备或操作系统。在我使用 Android 4.0.X 的一些旧设备上,它在唤醒锁释放调用后的暗淡阶段工作。在较新的设备上,4.3 和 4.4 它会立即关闭,没有暗淡的相位。我所知道的是获取 2 个唤醒锁,没有 ON_AFTER_RELEASE 的 SCREEN_BRIGHT_WAKE_LOCK 和有 ON_AFTER_RELEASE 的 SCREEN_DIM_WAKE_LOCK。在释放所有设备上的两个锁后,我有暗淡的阶段。示例代码:

private WakeLock alarmWakeLock = null;
private WakeLock alarmWakeLockDim = null;

public void wakeUp()
{
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
alarmWakeLock = pm.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK |
PowerManager.ACQUIRE_CAUSES_WAKEUP , "WakeLock");
if ((alarmWakeLock != null) && (alarmWakeLock.isHeld() == false))
alarmWakeLock.acquire(Globals.ALARM_TIMEOUT);

alarmWakeLockDim = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK |
PowerManager.ACQUIRE_CAUSES_WAKEUP | PowerManager.ON_AFTER_RELEASE, "WakeLockDim");
if ((alarmWakeLockDim != null) && (alarmWakeLockDim.isHeld() == false))
alarmWakeLockDim.acquire(Globals.TALARM_TIMEOUT);
}

public void sleep()
{
if ( alarmWakeLock != null && alarmWakeLock.isHeld() )
{
alarmWakeLock.release();
alarmWakeLock = null;
}
if ( alarmWakeLockDim != null && alarmWakeLockDim.isHeld() )
{
alarmWakeLockDim.release();
alarmWakeLockDim = null;
}
}

我将 Globals.ALARM_TIMEOUT 定义为 5 分钟 ( 5*60*1000 ),您必须选择一个适合您需要的值。

关于android - 使用标志 ON_AFTER_RELEASE 释放唤醒锁的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20338726/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com