我有一个记录视频的应用程序,它有大约80K的当前安装(超过100 K的下载),Crashlytics的统计数据似乎是良好的无崩溃用户99.66%,在Google Play上的评分也是OK - 4.5。
但是,对于我的一些用户来说,下一个错误可能会发生(到现在为止,这种错误可能会发生一次或几次,所以不经常发生,但仍然经常发生):
android.hardware.camera2.CameraAccessException: CAMERA_DISABLED (1): connectHelper:1578: Camera "0" disabled by policy
android.hardware.camera2.CameraAccessException: CAMERA_DISCONNECTED (2): Camera service is currently unavailable
java.lang.IllegalArgumentException: supportsCameraApi:2096: Unknown camera ID 0
android.hardware.camera2.CameraAccessException: CAMERA_DISABLED (1): validateClientPermissionsLocked:1066: Caller "com.MY_APP_PACKAGE" (PID 10237, UID 21433) cannot open camera "1" when sensor privacy is enabled
在使用camera2
API打开相机时:
...
cameraManager.openCamera(cameraId, stateCallback, mainHandler)`
} catch (e: Exception) {
e.printStackTrace()
openReportErrorDialog(e) // so a user could report this issue
...
报告的装置:
Android版本:从8到11 (app min SDK是6)
因此,它基本上可以对特定用户正常工作一段时间,在打开相机时没有问题,但这种异常有时会发生在这样的用户身上。
我不知道为什么会这样。我不能在我自己的设备上复制这个问题(两个三星,一个联想,一个华为和一个小米设备),只有用户可以不时报告这样的问题。
这里最无稽之谈的例外是Unknown camera ID 0
,因为在打开照相机之前,我得到了可用相机的列表,所以它不是硬编码的,不可能不存在这样的相机id,一个用户说,在这个错误之前,照相机正常工作
更新
找到这个
https://developer.android.com/guide/components/foreground-services#bg-access-restrictions
因此,如果前台服务是由系统(在BOOT_COMPLETED
广播上,在清单中声明)启动的,而不是通过app (如果用户启动应用程序)启动的,那么它就无法访问摄像头和麦克风。
因此,基本上,在重新启动设备后,如果没有用户交互,我们就无法自动启动相机。
对于汽车司机来说,仪表盘摄像头应用真的很糟糕.
他们添加了ACCESS_BACKGROUND_LOCATION
,但是没有ACCESS_BACKGROUND_CAMERA
和ACCESS_BACKGROUND_RECORD_AUDIO
.
发布于 2022-07-04 12:35:19
如果您的应用程序以Android 10 (API级别29)或更高为目标,并且访问前台服务中的位置信息,则将location前台服务类型声明为组件的属性。
<manifest>
...
<service ... android:foregroundServiceType="location|camera" />
在运行时,如果前台服务只需要访问清单中声明的类型的子集,则可以使用以下代码段中的逻辑限制服务的访问:
Notification notification = ...;
Service.startForeground(notification, FOREGROUND_SERVICE_TYPE_LOCATION| FOREGROUND_SERVICE_TYPE_CAMERA);
这就是你如何能够在背景中使用相机。
https://stackoverflow.com/questions/67284842
复制相似问题