如何检测是否有前置摄像头,如果有,如何使用和操作前置摄像头?

5
如何检测设备是否有前置摄像头,如果有的话如何使用和调用前置摄像头?

相关链接:http://stackoverflow.com/questions/3922042/how-to-detect-android-front-camera-programmatically(但是没有任何答案) - Shay Erlichmen
4个回答

19

如果您使用的是API级别9(Android 2.3)或更高版本,则可以执行以下操作来计算(第一个)前置摄像头的索引:

int getFrontCameraId() {
    CameraInfo ci = new CameraInfo();
    for (int i = 0 ; i < Camera.getNumberOfCameras(); i++) {
        Camera.getCameraInfo(i, ci);
        if (ci.facing == CameraInfo.CAMERA_FACING_FRONT) return i;
    }
    return -1; // No front-facing camera found
}

你可以使用索引来调用Camera.open方法,例如:

int index = getFrontCameraId();
if (index == -1) error();
Camera c = Camera.open(index);
获取相关相机。

1
检查相机ID在Kindle Fire上无法工作。它只有一个前置摄像头,其ID为back_camera_id。 - Cynichniy Bandera

5

你的代码不支持21以上的sdk,所以我添加了这些行使它可用 :)

    int getFrontCameraId(CameraManager cManager) {
    if (Build.VERSION.SDK_INT < 22) {
        Camera.CameraInfo ci = new Camera.CameraInfo();
        for (int i = 0; i < Camera.getNumberOfCameras(); i++) {
            Camera.getCameraInfo(i, ci);
            if (ci.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) return i;
        }
    } else {
        try {
            for ( int j = 0;j<cManager.getCameraIdList().length; j++) {
                String[] cameraId = cManager.getCameraIdList();
                CameraCharacteristics characteristics = cManager.getCameraCharacteristics(cameraId[j]);
                int cOrientation = characteristics.get(CameraCharacteristics.LENS_FACING);
                if (cOrientation == CameraCharacteristics.LENS_FACING_FRONT) 
                    return j;
            }
        } catch (CameraAccessException e) {
            e.printStackTrace();
        }
    }

    return -1; // No front-facing camera found
}

我已更新Oak的代码,现在它也支持新的camera2库。


1
如何检测是否有前置摄像头,如果有的话如何获取并使用前置摄像头?
至少在 Android 2.2 中没有相关 API。希望即将发布的 Gingerbread 版本能够增加对前置摄像头的内置支持。抱歉!

0
Kalpit,我不知道你是如何让代码能够运行的。我试图编辑你的答案,但整个答案都需要更改。这是我得到的结果。
@SuppressLint("NewApi" )
int getFrontCameraId() {
    if (Build.VERSION.SDK_INT < 22) {
        Camera.CameraInfo ci = new Camera.CameraInfo();
        for (int i = 0; i < Camera.getNumberOfCameras(); i++) {
            Camera.getCameraInfo(i, ci);
            if (ci.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) return i;
        }
    } else {
        try {
            CameraManager cManager = (CameraManager) getApplicationContext()
               .getSystemService(Context.CAMERA_SERVICE);
            String[] cameraId = cManager.getCameraIdList();
            for ( int j = 0;j<cameraId.length; j++) {
                CameraCharacteristics characteristics = cManager.getCameraCharacteristics(cameraId[j]);
                int cOrientation = characteristics.get(CameraCharacteristics.LENS_FACING);
                if (cOrientation == CameraCharacteristics.LENS_FACING_FRONT)
                    return Integer.parseInt(cameraId[j]);
            }
        } catch (CameraAccessException e) {
            e.printStackTrace();
        }
    }
    return -1; // No front-facing camera found
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接