为何部分Android 10/11设备无法枚举到所有物理摄像头?
为什么部分Android设备在调用
navigator.mediaDevices.enumerateDevices()时会返回所有物理摄像头,而另一些设备仅返回1个?我目前测试的设备均运行Android 10或Android 11系统。
根据官方文档说明,运行Android 9及以上版本的设备理应支持暴露所有摄像头。
我也尝试使用Camera 2 API进行调用,却依旧只获取到前后共2个摄像头,但我的设备实际配备了3个后置摄像头。
请问是什么原因导致我在Android 11系统下无法访问全部摄像头?有什么方法可以开启所有摄像头的暴露权限吗?
Android 10/11 无法枚举全部物理摄像头的原因与解决方案
问题原因
- ROM厂商定制限制:多数定制Android系统默认不会给普通第三方应用开放所有物理摄像头的访问权限,超广角、长焦等副摄仅系统相机或厂商白名单内的应用可调用,即使设备系统版本满足Android 9+的要求也不会主动暴露全部摄像头。
- 摄像头聚合逻辑:Android 9+的多摄像头公开能力为可选实现项,厂商可选择将多个物理摄像头聚合为单个逻辑摄像头对外提供服务,应用调用时系统会自动根据场景切换底层物理摄像头,不会将单个物理摄像头单独暴露给第三方应用。
- Web环境适配限制:如果是在Web场景下调用
navigator.mediaDevices.enumerateDevices()接口,返回结果受WebView/浏览器内核实现限制,部分厂商定制的浏览器内核默认只会返回1-2个主摄,不会枚举所有物理设备。
解决方法
- 提升应用相机权限等级:在原生应用的
AndroidManifest.xml中添加如下配置,申请全等级相机访问权限:<uses-permission android:name="android.permission.CAMERA" /> <uses-feature android:name="android.hardware.camera" android:required="true"/> <uses-feature android:name="android.hardware.camera.level.full" android:required="true"/> - 开启开发者选项对应开关:部分设备在系统开发者选项中提供了“允许第三方应用访问全部摄像头”的调试开关,开启后可绕过厂商默认限制枚举所有物理摄像头。
- 申请厂商白名单权限:部分厂商开放了独立的相机权限申请通道,提交应用资质申请通过后即可加入白名单,获得全摄像头访问权限。
- Web场景适配优化:如果是Web应用,建议引导用户使用原生Chrome类浏览器访问,定制ROM自带的浏览器默认限制更多,原生Chrome内核对
enumerateDevices()的适配更完善,枚举摄像头的覆盖度更高。
内容的提问来源于stack exchange,提问作者Alin
相关产品推荐
相关产品推荐

