设备屏幕关闭时如何打开手电筒?

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(),现在它可以工作了!我怀疑活动开始和相机打开之间存在竞争条件。使用服务避开了这条路。

以上是关于设备屏幕关闭时如何打开手电筒?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Android N 中打开设备手电筒?

使用相机时如何打开/关闭手电筒?

如何根据检测到颤振应用程序中的锁定或关闭屏幕采取行动

如何快速打开和关闭手电筒?

CameraX 库如何打开/关闭手电筒?

在后台运行安卓手电筒