设备屏幕关闭时如何打开手电筒?
Posted
技术标签:
【中文标题】设备屏幕关闭时如何打开手电筒?【英文标题】:How to turn ON flashlight when device screen is off? 【发布时间】:2019-03-18 21:36:24 【问题描述】:在我的应用程序中,我需要在由 BroadcastReceiver 启动的活动中启动手电筒。 如果应用程序处于前台或后台并且屏幕处于打开状态,则它可以正常工作,但如果屏幕处于关闭状态(有或没有键盘锁),则应用程序崩溃。
分析: 当屏幕关闭时,创建相机对象仍然成功,但 Camera.startPreview() 抛出 RuntimeException。
我可以理解屏幕关闭时禁止激活相机的动机,但我该如何打开/关闭手电筒?
cam = Camera.open();
//...
try
cam.startPreview();
catch(RuntimeException e)
Log.w(TAG,"Failed opening camera preview. Maybe screen locked?: " + e.getMessage());
return;
权限:
<uses-permission android:name="android.permission.CAMERA" />
我尝试使用 FLASHLIGHT(未记录)权限,但它在运行时被忽略。
在 Android 8.1、小米 Mi A1 上测试 minSdkVersion 22
我搜索的链接:
flash light is not turned on
flashlight not working,when device screen is off/sleep (android studio)
【问题讨论】:
【参考方案1】:如果屏幕处于关闭状态,则 Activity 在打开之前不会真正启动。这就是相机无法打开的原因。相反,启动一个服务来执行它,它实际上可以立即运行。
【讨论】:
我将 Camera.openpreview() 移至 Service.onCreate(),现在它可以工作了!我怀疑活动开始和相机打开之间存在竞争条件。使用服务避开了这条路。以上是关于设备屏幕关闭时如何打开手电筒?的主要内容,如果未能解决你的问题,请参考以下文章