我使用的是唤醒锁在我的应用程序,以防止手机上睡觉,当应用程序是可见的。

问题是当有一个方向变化和系统的破坏和重新创建的应用程序在观模式。如果唤醒锁定时器已经到期,在该背景的系统需要释放唤醒锁作为一个机会,以关掉屏幕上。

编辑:我应该提到,我唤醒锁onResume,并释放onPause-因为我了解,这是必要的,以释放,那么防止在应用程序漏的唤醒锁。

我需要唤醒锁继续通过定向变化。

下面我已经概述了一个解决方案。这是首选的方式来处理它,是否有任何选择吗?


创建一个服务持有唤醒锁(而不是活动)及时的活动解除绑定的服务开始倒计时器(用于说10秒)在其它会释放唤醒锁定时器到期时,如果该活动不会重新绑定。如果这是一个简单的方向变化的活动将重新绑定在10秒钟,所以维持唤醒锁,如果不是,唤醒锁将被释放。

谢谢。

有帮助吗?

解决方案

代替WakeLock的,使用getWindow().setFlags()标志尝试WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON

  

如果该激活锁定定时器已过期中   该系统采用的后台   激活锁定释放为契机   关掉屏幕。

它不应该。根据定义,用户交互与设备,所以屏幕应保持出于这个原因,独立于其他任何东西。

其他提示

下面是我做到了......

PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
wl = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK|PowerManager.ON_AFTER_RELEASE, "DoNotDimScreen");

其次...

wl.acquire();

...当你需要真正激活唤醒锁。

在“PowerManager.ON_AFTER_RELEASE”标志戳用户活动计时器,以便在屏幕上停留,用于当该唤醒锁定被释放时间稍长,这将是当你的活动上取向的变化被毁坏的情况。

工程确定为我!

我有没有它通过实际上从来没有释放唤醒锁。相反,我取得与超时。

private PowerManager.WakeLock wl;

protected void onStart(Bundle savedInstanceState) {
    PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
    wl = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, "Words counter");
    // disable reference counting, as acquire/release calls are not paired
    wl.setReferenceCounted(false);
    wl.acquire();
}

protected void onStop() {
    // acquire for few seconds to keep lock until onStart is called with new orietnation
    wl.acquire(3000);
}

优势的其他方法:

  • 可用的 SCREEN_DIM_WAKE_LOCK
  • 简单的(没有必要玩isFinishing()etc.)
  • 不会捅用户活动后取向的改变。I.e。灰色显示保持变暗
  • 如果你释放(例如时间到了但用户仍然在活动),这是立即释放。不需要等于默认的超时。
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top