java - 当前不允许连接到相机“1”
问题描述
ANDROID 由 java.lang.SecurityException 引起:validateClientPermissionsLocked:1102:来自设备用户 0 的调用者当前不允许连接到摄像头“1”
授予相机权限。
它由 FOREGROUND SERVICE 运行。
适用于大多数设备,但很少有 Android 9、华为、摩托罗拉和小米设备无法运行。
第 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 提供)。
我写了一些代码来避免在接近传感器打开时使用相机,它完全解决了这个问题。
我不知道它背后的逻辑是什么,但它起作用了:)
推荐阅读
- php - 使用 PHP 创建基本的 JVZOO api
- date - 确保移动用户没有向服务器发送虚假的日期、时间和时区
- c++ - 使用 MPI Scatter 分布数字 - 错误
- c# - Windows8/win10 c++/c# : 有多个虚拟桌面同时处于活动状态
- angular - 对象可能是 BehaviourSubject 的“未定义”
- css - CSS - 移动设备的奇怪“放大”背景图片
- arrays - 我可以在 ruby 中有一个正则表达式数组吗?
- android - SQLite getwritableDatabase 返回 null
- java - 此生产者消费者的非法监视器状态异常?
- javascript - 如何在 C# 应用程序中显示 HTML 画布?