实际上,我的应用程序出现了一些问题。例如,我有一个按钮可以打开前置摄像头并扫描服务员徽章,但问题在于当我尝试检查设备是否有摄像头时,如果没有,我就会隐藏那个按钮。
但是,我有一个设备使用前置摄像头作为QR扫描仪,因此它实际上不能用作摄像头,所以当我尝试点击该按钮时,应用程序会崩溃。
所以问题是如何处理并检查不仅摄像头是否存在,甚至它是否工作?
private boolean hasFrontCamera() {
Camera.CameraInfo cameraInfo = new Camera.CameraInfo();
int numberOfCameras = Camera.getNumberOfCameras();
for (int i = 0; i < numberOfCameras; i++) {
Camera.getCameraInfo(i, cameraInfo);
if (cameraInfo.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) {
return true;
}
}
return false;
}
您可以使用PackageManager的hasSystemFeature()函数来检查设备是否具有前置摄像头
private boolean checkCameraHardware(Context context) {
if (context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_FRONT)){
// this device has a camera
return true;
} else {
// no camera on this device
return false;
}
}
Android Pie增加了更多功能以枚举相机:
在运行于Android 9设备上的应用程序可以通过调用getCameraIdList()来发现每个可用的相机。应用程序不应假定设备只有一个后置相机或只有一个前置相机。
例如,如果您的应用程序有一个按钮用于在前置和后置相机之间切换,则可能有多个前置或后置相机可供选择。您应该遍历相机列表,检查每个相机的特性,并决定向用户公开哪些相机。