java - 当前不允许连接到相机 "1"

标签 java android kotlin

Android Caused by java.lang.SecurityException: validateClientPermissionsLocked:1102: 当前不允许来自设备用户 0 的调用者连接到相机“1”

已授予相机权限。

它由前台服务运行。

适用于大多数设备,但只有少数 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) {
        }

最佳答案

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

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

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

关于java - 当前不允许连接到相机 "1",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59992259/

相关文章:

java - 为什么 java.util.Scanner.next() 返回空字符串?

java - Android - 显示加载文本

android - Android 上的 Sesame RDF 存储/查询

java - 用PHP压缩的字符串与用Java压缩的字符串不匹配

kotlin - 减少范围抛出 NoClassDefFoundError : kotlin/IntIterator

android - lateinit 属性 llMain(RecyclerView) 尚未初始化

java - Kotlin:创建并引用真正的 Java 数组(用于 JNA)

java - 由于某些原因它没有添加到 arrayList

java - 字符串数组反转Java

java - Android - 如何在滑动时移动 ImageView