很多设备(尤其是中国品牌的设备)隐藏了一些非原生应用程序的相机 ID。
还有一个解决方案可以访问更多摄像头:
for (id in 0..511) {
try {
val cameraId = id.toString()
manager.getCameraCharacteristics(cameraId)
// found a camera, no exception
} catch (e: Throwable) {
// ignore
}
}
一些用户可以使用它来访问小米设备上的超广角镜头相机,然后他们只能访问主后置和前置摄像头。
但它并不总是有效,当您尝试使用
CameraManager.openCamera(...)
打开它们时,发现的隐藏摄像头的全部或部分可能无法在某些设备上工作,会有例外。
但是,如果有一种方法可以在使用之前检查此类相机ID是否可以用于打开相机
CameraManager.openCamera(...)
,它已经尝试使用相机进程并且需要授予相机权限?
不,这些 ID 被隐藏的全部原因是它们没有真正遵循 API 规则。
制造商并未将这些相机报告为公开可用,因此它们没有经过 Android 合规性测试套件的合规性测试。它们的操作没有任何保证,也没有 API 可以查询它们,因为这样它们就会公开可用,并且必须通过这些合规性测试。