检测后置摄像头不足

and*_*eil 8 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;
        }
    }
Run Code Online (Sandbox Code Playgroud)

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

PackageManager pm = context.getPackageManager();
return pm.hasSystemFeature(PackageManager.FEATURE_CAMERA);
Run Code Online (Sandbox Code Playgroud)

但是,我不知道在Nexus 7上会发生什么,只有前置摄像头.这会是真的吗?

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

Sah*_* Mj 9

Nexus 7(只有一个前置摄像头)返回false FEATURE_CAMERA,而不是它,你可以使用FEATURE_CAMERA_FRONT.看看这个讨论.

现在,通过使用上面的内容,您可以确保至少有一个摄像头.所以现在,您可以检查手机中存在的相机数量,如果它大于1,那么肯定会有后置相机.

import android.hardware.Camera;

int numCameras = Camera.getNumberOfCameras();
if (numCameras > 1) {
  rearCamera = true;
}
Run Code Online (Sandbox Code Playgroud)

这非常棘手.但就是这样,我现在可以想到.试一试吧.

  • 这不适用于只有后置摄像头可用的情况. (4认同)