android - 检测后置摄像头缺失

标签 android android-camera

我的应用程序具有需要后置摄像头的功能。是否有前置摄像头与我的需求无关。事实证明,在所有情况下,建立一个强大的程序来检测后置摄像头是否存在是很棘手的。例如,一位拥有 HTC Evo 3D 的用户提示该应用程序说没有后置摄像头(显然有),我也收到过许多来自其他用户的类似投诉。

这是一件很难测试的事情,因为尽管有很多设备,但我没有一台只有前置摄像头的设备,例如 Nexus 7 或用户提到的任何型号。

这是我所拥有的,这是从本网站其他答案的代码中获取的:

boolean rearCameraFound = false;
    if(BUILD_VERSION > 8){
        int cameraCount = 0;
        Camera cam = null;
        Camera.CameraInfo cameraInfo = new Camera.CameraInfo();
        cameraCount = Camera.getNumberOfCameras();
        for ( int camIdx = 0; camIdx < cameraCount; camIdx++ ) {
            Camera.getCameraInfo( camIdx, cameraInfo );
            if ( cameraInfo.facing == Camera.CameraInfo.CAMERA_FACING_BACK  ) {
                try {
                    cam = Camera.open( camIdx );
                    Log.d("TAG", "Rear camera detected");
                    rearCameraFound = true;
                } catch (RuntimeException e) {
                    Log.e("TAG", "Camera failed to open: " + e.getLocalizedMessage());
                }
            }
            if ( cameraInfo.facing == Camera.CameraInfo.CAMERA_FACING_FRONT ) {
                Log.d("TAG", "Front camera detected");
            }
        }
        return rearCameraFound;
    }else{
        if (context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA)){
            // this device has a camera
            return true;
        } else {
            // no camera on this device
            return false;
        }
    }

我现在用这个更简单的版本替换了这段代码:

PackageManager pm = context.getPackageManager();
return pm.hasSystemFeature(PackageManager.FEATURE_CAMERA);

但是,我不知道在只有前置摄像头的 Nexus 7 上会发生什么情况。这会返回 true 吗?

我正在寻找能够确定是否有后置摄像头的代码!

最佳答案

Nexus 7(只有一个前置摄像头)向 FEATURE_CAMERA 返回 false,您可以使用 FEATURE_CAMERA_FRONT 代替它。看看这个 discussion .

现在,通过使用上面的方法,您可以确保至少有一个摄像头。所以现在,你可以查看手机中的摄像头数量,如果大于一个,那么肯定有一个后置摄像头。

import android.hardware.Camera;

int numCameras = Camera.getNumberOfCameras();
if (numCameras > 1) {
  rearCamera = true;
}

这很棘手。但仅此而已,我现在能想到的。试试吧。

关于android - 检测后置摄像头缺失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14399333/

相关文章:

android - 为什么相机 Intent 会自动将图像保存到磁盘?

android - 缓存图像而不显示 Glide

android - Android 中的静态变量真的是 "global"(系统范围)吗?

android - 样式自定义弹出菜单

android - 拍照没有预览 Android

java - 如何使用套接字发送位图?

android - 无法生成 View 绑定(bind) java.lang.IndexOutOfBoundsException

java - Android studio 如何一次创建注册屏幕

android - 尽管设置了预览大小,setParameters() 仍然失败

Android Camera2 API - 检测何时获得焦点