如何检测前置摄像头和闪光灯可用性

时间:2014-01-04 12:06:26

标签: android flash android-camera android-package-managers front-camera

您好我正在开发自定义视频应用。我可以通过

获得currentCameraId
currentCameraId = Camera.CameraInfo.CAMERA_FACING_BACK;

我有两个问题要问:

1)如何仅使用前置摄像头检测Android设备。

因为在Micromax标签中只有前置摄像头的平板电脑上,currentCameraId为0。

2)如何检查相机闪光灯的可用性,因为以下代码无法在某些手机上使用

flash = this.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH);

请帮助。

谢谢!

2 个答案:

答案 0 :(得分:7)

检查Flash Light是否可用

boolean hasFlash = getApplicationContext().getPackageManager()
                .hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH);

检查相机是否可用

PackageManager pm = context.getPackageManager();

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

}

如果您使用的是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 :(得分:0)

你可以试试这个

public boolean hasFlash() {
        if (camera == null) {
            return false;
        }

        Camera.Parameters parameters = camera.getParameters();

        if (parameters.getFlashMode() == null) {
            return false;
        }

        List<String> supportedFlashModes = parameters.getSupportedFlashModes();
        if (supportedFlashModes == null || supportedFlashModes.isEmpty() || supportedFlashModes.size() == 1 && supportedFlashModes.get(0).equals(Camera.Parameters.FLASH_MODE_OFF)) {
            return false;
        }

        return true;
    }