首页 > 解决方案 > 当前不允许连接到相机“1”

问题描述

ANDROID 由 java.lang.SecurityException 引起:validateClientPermissionsLocked:1102:来自设备用户 0 的调用者当前不允许连接到摄像头“1”

授予相机权限。

它由 FOREGROUND SERVICE 运行。

适用于大多数设备,但很少有 Android 9、华为、摩托罗拉和小米设备无法运行。

在此链接上:https ://android.googlesource.com/platform/frameworks/av/+/refs/heads/master/services/camera/libcameraservice/CameraService.cpp

第 1031 行解释说:“只允许当前前台设备用户正在使用的客户端。”

这是否意味着它不能被前台服务访问?

Kotlin 中的代码(在 manager.openCamera 发生崩溃):

 try {
            val pickedCamera = getCamera(manager) ?: return
            if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA)
                != PackageManager.PERMISSION_GRANTED
            ) {
                return
            }
            manager.openCamera(pickedCamera, cameraStateCallback, null)
            imageReader =
                ImageReader.newInstance(1920, 1088, ImageFormat.JPEG, 1 /* images buffered */)
            imageReader.setOnImageAvailableListener(onImageAvailableListener, null)
        } catch (e: CameraAccessException) {
        }

标签: javaandroidkotlin

解决方案


在分析了更多的崩溃后,我发现 100% 的崩溃用户都激活了接近传感器(由 Firebase Crashlytics 提供)。

我写了一些代码来避免在接近传感器打开时使用相机,它完全解决了这个问题。

我不知道它背后的逻辑是什么,但它起作用了:)


推荐阅读