我正在开发一个 cordova /离子应用程序,它可以让用户使用webrtc(peerJs)实时查看安道尔手机的摄像头。
我需要允许设备关闭屏幕后(让我们说)15秒,并继续传输视频到其他Android设备。
据我所知,要处理这个问题,我需要获得一个部分唤醒锁定(这允许屏幕关闭,并保持应用程序运行),从来没有释放它,所以应用程序不断发送我的视频无休止。
我决定采用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。它工作了,屏幕从来没有关闭,它让我不停地发送视频。这让我认为唤醒锁获取是成功的。当我把代码改为PARTIAL_WAKE_LOCK,屏幕只是在15秒后关闭,视频只是冻结。
我已经读到获取唤醒锁的类必须扩展“Application”,但是这个类CordovaActivity扩展了Activity,我不能让它扩展另一个类,也不能用“Application”替换“Activity”。我不知道这是否是必要的,因为上面的代码使用SCREEN_DIM_WAKE_LOCK工作正常。
我试着用这个插件https://github.com/boltex/cordova-plugin-powermanagement来获取部分唤醒锁,但是它和上面的一样。
谢谢
1条答案
按热度按时间368yc8dk1#
结果是唤醒锁没有释放。发生的事情是相机的编程与屏幕的状态紧密耦合。即使CPU仍然打开,关闭屏幕也会禁用相机,所以视频冻结。