【问题标题】: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)

【问题讨论】:

    标签: android android-permissions torch flashlight


    【解决方案1】:

    如果屏幕处于关闭状态,则 Activity 在打开之前不会真正启动。这就是相机无法打开的原因。相反,启动一个服务来执行它,它实际上可以立即运行。

    【讨论】:

    • 我将 Camera.openpreview() 移至 Service.onCreate(),现在它可以工作了!我怀疑活动开始和相机打开之间存在竞争条件。使用服务避开了这条路。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-05
    • 1970-01-01
    • 2017-03-19
    • 2015-01-28
    • 2020-06-04
    • 1970-01-01
    • 2021-05-05
    相关资源
    最近更新 更多