Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/189.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 检测缺少后置摄像头_Android_Android Camera - Fatal编程技术网

Android 检测缺少后置摄像头

Android 检测缺少后置摄像头,android,android-camera,Android,Android Camera,我的应用程序具有需要后置摄像头的功能。是否有前置摄像头与我的需要无关。事实证明,在任何情况下,建立一个健壮的例程来检测后置摄像头是否存在都是一件棘手的事情。例如,一位使用HTC Evo 3D的用户抱怨说,该应用程序没有后置摄像头(显然有),而我也收到了许多其他用户的类似投诉 这是一个需要测试的棘手问题,因为尽管有很多设备,但我没有一个只有前置摄像头的设备,比如Nexus7,或者用户提到的任何型号 以下是我所拥有的,这是从本网站上其他答案的代码中获取的: boolean rearCameraFou

我的应用程序具有需要后置摄像头的功能。是否有前置摄像头与我的需要无关。事实证明,在任何情况下,建立一个健壮的例程来检测后置摄像头是否存在都是一件棘手的事情。例如,一位使用HTC Evo 3D的用户抱怨说,该应用程序没有后置摄像头(显然有),而我也收到了许多其他用户的类似投诉

这是一个需要测试的棘手问题,因为尽管有很多设备,但我没有一个只有前置摄像头的设备,比如Nexus7,或者用户提到的任何型号

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

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;
        }
    }
然而,我不知道在Nexus7上会发生什么,例如,只有一个前置摄像头。这是真的吗

我正在寻找的代码,将告诉我,如果有一个后方摄像头或没有肯定

Nexus 7(只有一个正面摄像头)将false返回给
功能摄像头
,您可以使用
功能摄像头
。看看这个

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

import android.hardware.Camera;

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

这相当棘手。但这就是我现在能想到的。试试看。

使用这个片段。注:这仅适用于API 9或更高版本

private static boolean checkCameraFacing(final int facing) {
    if (getSdkVersion() < Build.VERSION_CODES.GINGERBREAD) {
        return false;
    }
    final int cameraCount = Camera.getNumberOfCameras();
    CameraInfo info = new CameraInfo();
    for (int i = 0; i < cameraCount; i++) {
        Camera.getCameraInfo(i, info);
        if (facing == info.facing) {
            return true;
        }
    }
    return false;
}

public static boolean hasBackFacingCamera() {
    final int CAMERA_FACING_BACK = 0;
    return checkCameraFacing(CAMERA_FACING_BACK);
}

public static boolean hasFrontFacingCamera() {
    final int CAMERA_FACING_BACK = 1;
    return checkCameraFacing(CAMERA_FACING_BACK);
}

public static int getSdkVersion() {
    return android.os.Build.VERSION.SDK_INT;
}
private静态布尔checkCameraFacing(最终整型){
if(getSdkVersion()
无需打开摄像头。

对于前置摄像头

Context context = this; //If its Activity

// Context context=getActivity(); If its a Fragment

PackageManager packageManager = context.getPackageManager();

if (packageManager.hasSystemFeature(PackageManager.FEATURE_CAMERA_FRONT)) {

    Log.i("CameraLog", "Front Camera Available");

} else {

    Log.i("CameraLog", "No Front Camera Available");
      }
后置摄像机

Context context = this; //If its an Activity

// Context context=getActivity(); If its a fragments 

PackageManager packageManager = context.getPackageManager();

if (packageManager.hasSystemFeature(PackageManager.FEATURE_CAMERA)) {

    Log.i("CameraLog", "Back Camera is Available");

} else {

    Log.i("CameraLog", "No Back Camera Available");

      }

如果设备只有一个摄像头,它可以只有后摄像头,也可以只有前摄像头,首先检查后摄像头是否存在:

  • 检查是否存在前置摄像头,但带有两个摄像头的设备显然有前置摄像头
  • 检查设备是否只有一个摄像头,但可以有后摄像头或前摄像头
  • 最终结果:如果设备具有前摄像头,并且只有一个摄像头,则不存在后摄像头
private boolean backCameraExists(){
布尔值isFrontExists=getApplicationContext().getPackageManager().hasSystemFeature(PackageManager.FEATURE\u CAMERA\u FRONT);

if(isFrontExists&&(Camera.getNumberOfCameras()仅供参考,此代码在运行股票JB 4.2Sahil的Nexus 7上返回false-过去我曾尝试过这样做,但被告知我没有足够的声誉来这么做。我想我现在有了,所以我一定会仔细考虑我的问题并确保这一点,谢谢。因此,似乎我更新、更简单的代码可以满足所有要求,如果我只想k现在谈谈后置摄像头。我想我所能做的就是尝试等待用户反馈。这不适用于只有后置摄像头可用的情况。@Tranhaongduyanh您到底想做什么?@Sahilmahahajanmj有一些设备只有后置摄像头,没有前置摄像头。在这种情况下,numCameras=1。@Tranhaongduyanh,我得到了。但现在您想要什么?你想知道有没有前置摄像头吗?
Context context = this; //If its an Activity

// Context context=getActivity(); If its a fragments 

PackageManager packageManager = context.getPackageManager();

if (packageManager.hasSystemFeature(PackageManager.FEATURE_CAMERA)) {

    Log.i("CameraLog", "Back Camera is Available");

} else {

    Log.i("CameraLog", "No Back Camera Available");

      }
private boolean backCameraExists() {
    boolean isFrontExists = getApplicationContext().getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_FRONT);
    if (isFrontExists && (Camera.getNumberOfCameras()<2)) {
        return false;
    }
    return true;
}