Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/196.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何在部分唤醒锁定期间打开屏幕_Android_Screen_Power Management - Fatal编程技术网

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

Android 如何在部分唤醒锁定期间打开屏幕,android,screen,power-management,Android,Screen,Power Management,我的活动使用部分唤醒锁运行,因为它不断处理接收到的蓝牙数据。唤醒锁的设置如下: powerManager = (PowerManager) getSystemService(Context.POWER_SERVICE); wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "MyWakeLock"); wakeLock.acquire(); 当某些事件发生时,我希望在显示器上显示,以便用户可以查看状

我的活动使用部分唤醒锁运行,因为它不断处理接收到的蓝牙数据。唤醒锁的设置如下:

  powerManager = (PowerManager) getSystemService(Context.POWER_SERVICE);
  wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "MyWakeLock");
  wakeLock.acquire();
当某些事件发生时,我希望在显示器上显示,以便用户可以查看状态。我希望显示器自动打开,而不是通过用户按键。 然而,所有这样做的尝试都失败了。 当显示器在部分唤醒锁定下运行时关闭时,我试图将显示器转回并让用户看到当前活动的尝试失败。我尝试过伪造用户活动:

PowerManager NewPowerManager = (PowerManager) getSystemService(Context.POWER_SERVICE);
   NewPowerManager.userActivity(1, false);
设置窗口的标志:

 Window win = getWindow();
  win.setFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON, WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
甚至释放唤醒锁并启动另一个应该打开屏幕的:

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();
这里有我遗漏的东西吗?我并不是试图打开一个新的活动,只是向用户显示我当前的活动。 还有谁能做到这一点吗?
谢谢你能给我的任何帮助。

在看到HTC Lance的一些演示代码后,我终于能够解决这个问题(顺便说一句,谢谢)

秘密似乎是使用ACQUIRE_CAUSES_WAKEUP set创建一个额外的完全唤醒锁。我不会释放原始的部分唤醒锁,但是当我想打开显示器时,我会创建新的完全唤醒锁,完成我的工作,然后释放新的完全唤醒锁。这确实有效

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();
可能重复的