如何在部分唤醒锁定期间打开屏幕

Tar*_*ary 7 android screen power-management

我的活动运行部分唤醒锁定,因为它会持续处理收到的蓝牙数据.唤醒锁的设置如下:

  powerManager = (PowerManager) getSystemService(Context.POWER_SERVICE);
  wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "MyWakeLock");
  wakeLock.acquire();
Run Code Online (Sandbox Code Playgroud)

当某些事件发生时,我想在显示屏上显示,以便用户可以查看状态.我希望显示器自动打开,而不是通过用户按键打开.然而,所有这样做的尝试都失败了.当使用部分唤醒锁定运行时显示屏关闭时,我尝试将显示屏返回并让用户看到当前活动失败.我试过伪造用户活动:

PowerManager NewPowerManager = (PowerManager) getSystemService(Context.POWER_SERVICE);
   NewPowerManager.userActivity(1, false);
Run Code Online (Sandbox Code Playgroud)

设置窗口的标志:

 Window win = getWindow();
  win.setFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON, WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
Run Code Online (Sandbox Code Playgroud)

甚至释放唤醒锁并启动另一个应该打开屏幕:

if (wakeLock != null)
   {
      wakeLock.release(); // release the wakelock
   }
PowerManager.WakeLock TempWakeLock = powerManager.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK |
   PowerManager.ACQUIRE_CAUSES_WAKEUP, "TempWakeLock");
   // tried | PowerManager.ON_AFTER_RELEASE to no avail
   TempWakeLock.acquire();
Run Code Online (Sandbox Code Playgroud)

这里有什么我想念的吗?我不打算开放一个新活动,而只是向用户显示我当前的活动.有没有其他人能够做到这一点?感谢你给与我的帮助.

Tar*_*ary 9

在看到来自HTC的Lance的一些演示代码之后,我终于能够解决这个问题了(感谢顺便说一下).

秘密似乎是创建一个ACQUIRE_CAUSES_WAKEUP设置的额外完全唤醒锁定.我没有释放原始的部分唤醒锁定,但是当我想打开显示器时,我创建了新的完全唤醒锁定,执行我的操作,然后释放新的完全唤醒锁定.这实际上有效!

PowerManager TempPowerManager = (PowerManager) getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock TempWakeLock = TempPowerManager.newWakeLock(PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP | 
PowerManager.ON_AFTER_RELEASE, "TempWakeLock");
TempWakeLock.acquire();

// do the work that needs the visible display...

// Release the newest wakelock and fall back to the old one
TempWakeLock.release();
Run Code Online (Sandbox Code Playgroud)