屏幕关闭时部分唤醒锁定释放

Posted

技术标签:

【中文标题】屏幕关闭时部分唤醒锁定释放【英文标题】:Partial wake lock releases when screen turns off 【发布时间】:2016-01-22 19:02:01 【问题描述】:

我正在构建一个 Cordova/Ionic 应用程序,它允许用户使用 webrtc (peerJs) 实时查看 Andoroid 手机的摄像头。

我需要让设备在(假设)15 秒后关闭屏幕,并继续将视频传输到其他 android 设备。

据我所知,要解决这个问题,我需要获得一个 PARTIAL_WAKE_LOCK(这可以关闭屏幕并保持应用程序运行),并且永远不要释放它,因此应用程序会不断地向我发送视频。

我决定使用 Android 原生实现,因此我获得了 "onStart()" 方法中的锁定,该方法存在于platforms\android\CordovaLib\src\org\apache\cordova\CordovaActivity.java 中,并带有此代码几乎在每个教程中

 PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
      wakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,
        "My wakelook");
      wakeLock.acquire();

我首先尝试了上面的代码,获得了 SCREEN_DIM_WAKE_LOCK。它起作用了,屏幕从未关闭过,它让我无休止地发送视频。这让我觉得wakelock获取成功了。当我将代码更改为 PARTIAL_WAKE_LOCK 时,屏幕会在 15 秒后关闭,视频会冻结。

我读到获取唤醒锁的类必须扩展“应用程序”,但是这个类 CordovaActivity 扩展了 Activity,我不能让它扩展另一个类,也不能用“应用程序”替换“活动”。我不知道这是否必要,因为上面的代码使用 SCREEN_DIM_WAKE_LOCK 可以正常工作。

我尝试使用这个插件https://github.com/boltex/cordova-plugin-powermanagement 来获取部分唤醒锁,但它的作用与上述相同。

谢谢

【问题讨论】:

【参考方案1】:

原来唤醒锁没有释放。发生的情况是相机的编程与屏幕的状态紧密耦合。即使 CPU 仍处于开启状态,关闭屏幕也会禁用相机,这就是视频冻结的原因。

【讨论】:

以上是关于屏幕关闭时部分唤醒锁定释放的主要内容,如果未能解决你的问题,请参考以下文章

屏幕锁定时,Android 无法接收位置更新

手机锁定时,使用部分唤醒锁和服务不会使应用程序运行

ios中是不是有任何类型的部分唤醒锁定机制?

Android Galaxy S4 -- 在锁定屏幕上可见的活动

xml Android - AndroidJUnitRunner,禁用动画,禁用屏幕锁定和唤醒处理器,以避免测试失败,因为

xml Android - AndroidJUnitRunner,禁用动画,禁用屏幕锁定和唤醒处理器,以避免测试失败,因为