Camera2cameraManager.openCamera在某些设备上有时会出现异常

2024-02-21

我有一个录制视频的应用程序,目前安装量约为 80K(超过 100K 下载量),Crashlytics 统计数据似乎不错 - 无崩溃用户 99.66%,Google Play 上的评分也不错 - 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
...

报告的设备:

  • 体内1906
  • 惠泰克 BV5500Plus
  • 三星 SM-N975F
  • 三星 SM-G988W
  • 三星 SM-A520F
  • 摩托罗拉 REVVLRY
  • 华为VOG-L09
  • 华为STK-LX1
  • 华为MRD-LX1
  • 华为Fig-LX1
  • 酷派CP3669AS
  • Infinix X655C

Android 版本:从 8 到 11(应用程序最小 SDK 为 6)

所以基本上它可以在一段时间内为特定用户正常工作,打开相机时没有问题,但有时此类用户可能会出现此异常

我不知道为什么会发生这种情况。我无法在自己的设备(两台三星、一台联想、一台华为和一台小米设备)上重现此问题,只有用户可以不时报告此类问题...

这里最废话的例外是Unknown camera ID 0,因为在打开相机之前我得到了可用相机的列表,所以它不是硬编码的,这样的相机ID不可能不存在,并且用户说在这个错误之前相机工作正常

UPDATE

找到了这个

https://developer.android.com/guide/components/foreground-services#bg-access-restrictions https://developer.android.com/guide/components/foreground-services#bg-access-restrictions

所以看来前台服务是否由系统启动(在BOOT_COMPLETED广播,在清单中声明)而不是由应用程序(如果用户启动应用程序),那么它无法访问摄像头和麦克风。

因此,基本上在重新启动设备后,如果没有用户交互,我们将无法再自动启动相机。

对于汽车驾驶员的仪表板摄像头应用来说真的很糟糕......

他们补充说ACCESS_BACKGROUND_LOCATION,但是没有ACCESS_BACKGROUND_CAMERA and ACCESS_BACKGROUND_RECORD_AUDIO...


android.hardware.camera2.CameraAccessException: CAMERA_DISABLED (1): connectHelper:1578: Camera "0" disabled by policy

这要么意味着该设备安装了一项禁用摄像头的企业策略(例如,雇主不希望员工在工作中拍摄东西),要么您的应用程序试图在最新的 Android 版本中在后台打开摄像头。

如果是政策的问题,除了告诉用户有政策并向他们的管理员投诉之外,您无能为力。

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

这意味着 OEM 具有某种“关闭所有摄像头”功能,例如无线电的飞行模式。与上面的企业策略一样,这是您无法控制的 - 用户需要重新启用摄像头访问,因此您所能做的就是弹出一个对话框,显示“摄像头已禁用,抱歉”。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Camera2cameraManager.openCamera在某些设备上有时会出现异常 的相关文章

  • 在解决依赖关系之前运行 gradle 任务

    我想运行一个 gradle 任务 在 gradle 尝试解决依赖关系之前获取其他源并设置它们 在 build gradle 中有一个任务 用于获取子项目的源代码 该任务需要在 Gradle 尝试解决依赖关系之前运行 因为子项目是依赖关系的一
  • Android-ListView-performItemClick

    当我尝试使用时遇到一些困难执行项目单击ListView 的功能 我想要做的就是以编程方式在列表的第一项中执行单击 我怎样才能做到这一点 我在文档中查找了该函数 但我并不真正理解它的参数 我尝试过类似的事情 myListView perfor
  • 从 admob 独立 SDK 切换到 Google Play 服务 SDK 时,apk 大小会膨胀

    使用 Admob SDK 我的 apk 大小为 230Kb 当用 google play services SDK 替换 Admob SDK 时 它是 1 5MB 膨胀了 6 倍以上 我想完整的 Google Play 服务客户端 SDK
  • ImageView Android 内存

    我原来的后续question https stackoverflow com questions 5339883 android app ram usage 有没有一种方法可以在 Android 应用程序中使用 ImageViews 而不使
  • 在 Android 中从互联网链接获取数据

    我正在制作一个带有 URL 的应用程序 asp 扩展名 我们向其传递所需的参数并使用 POST 方法获取一些字符串结果 关于如何实现这一目标有什么建议吗 UPDATED 实际上我有一个 net 链接 它接受一些 POST 参数并给我一个结果
  • XAMARIN - 添加来自 youtube 的视频

    我搜索如何从 youtube 添加视频的信息 例如 我想从一些 YouTube 链接添加视频 我认为它应该在网络视图中 但我需要一些详细信息 因为我找不到有关我的问题的任何信息 您可以使用 webview 播放 youtube 视频 str
  • 意图过滤器到底是什么?

    我读过很多关于意图过滤器的文章 但我真的无法理解它们到底是做什么的 那么 如果有人可以用一个清晰 的例子向我解释意图过滤器的作用到底是什么 thanks 我认为这是有据可查的here http developer android com g
  • 通过 Intent 从文件管理器中选择文件

    我想做的 我想获取文件字符串形式的路径 我通过 Android 文件管理器选择该路径 我拥有的 Intent intent new Intent Intent ACTION GET CONTENT intent setType startA
  • Android物理引擎[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 在研究了 3D 游戏编程之后 很快就明白了为什么物理引擎非常有用 Android 支持哪些物理引擎并且可以在 Android 上使用 关于
  • 按钮上方带有文本的单选按钮

    我是 Android 新手 我需要在我的活动中添加单选按钮 但我需要将文本放在项目符号按钮的顶部 请提供任何帮助 我发现了以下内容 尽管我不明白 drawable in 选择器和 style Tab 样式是什么 顶部带有文本的单选按钮 ht
  • Android TabLayout:均匀分布

    我正在查看 Google IO 中使用的 Google 类 称为 SlidingTabLayout 在该类中 有一个名为 setDistributeEvenly 的方法 它允许所有这些选项卡在屏幕上均匀分布 每个选项卡具有相同的大小 中心对
  • toArray 与预先确定大小的数组

    使用时ar toArray new String ar size 安卓工作室3 2 1警告预先确定大小的数组并建议空数组 有两种方式将集合转换为数组 使用 预先确定大小的数组 如 c toArray new String c size 或使
  • 如何更改蜂窝中儿童偏好屏幕的背景颜色

    过去几天我一直在寻找解决方案 但找不到 我需要更改右窗格的背景颜色 我知道如何更改左父首选项的颜色 我在清单文件中创建了一个新主题
  • 如何从Android webview下载文件?

    我下面的代码可以很好地加载 url 页面 并且在搜索歌曲后 当我单击下载链接时 它崩溃了 关于如何让下载管理器与网络视图一起工作的教程并不多 我究竟做错了什么 import java io File import android app A
  • 拥有可重用对话框的最佳方法是什么?

    在 Android 中创建可重用对话框的最佳方法是什么 阅读通过对话框开发指南 http developer android com guide topics ui dialogs html 我知道我可以使用AlertDialog Buil
  • 使用磁场计算旋转矩阵

    在获取旋转矩阵值时它包含public static boolean getRotationMatrix float R float I float gravity float geomagnetic 这里我如何计算float gravity
  • 尝试重新打开已关闭的对象:sqlitequery

    所以本质上我查询数据库两次 我不明白这个错误真正来自哪里 因为我没有在任何地方关闭数据库 返回错误的代码是这样运行的 我查了一下 刚刚看到一个像我这样的案例 BeaconHandler pullAllDB new BeaconHandler
  • 当应用程序从最近的应用程序中滑动时,前台服务会被终止,通知也会被删除

    我有一个foreground service有通知 当应用程序从最近的应用程序托盘中滑出时 服务将被终止 通知也会被删除 这是我的服务的代码VoiceService class Override public IBinder onBind
  • 如何在不下载子项的情况下从 Firebase 获取子项密钥?

    我有一个 Firebase 数据库 其中的节点 items 有很多子项 我想导入子项键的列表 由于每个子项都包含相当多我对此不感兴趣的数据 因此我想仅下载子项密钥 以最大程度地减少传输的数据量 为了便于说明 假设我有以下数据结构 然后我想获
  • 活动构建变体没有测试工件

    我基于 调试 构建变体创建了一个名为 bitrise 的新构建类型 使用 debug 构建变体时 经过检测的 androidTests 构建并运行良好 但是当我切换到新的 bitrise 构建变体时 出现以下错误 Process finis

随机推荐