Android测试前置摄像头是否支持闪光灯

时间:2013-05-06 14:29:26

标签: android android-camera

我知道可以使用如下方法检测相机是否集成了闪光灯:

 /** 
 * @return true if a flash is available, false if not
 */
public static boolean isFlashAvailable(Context context) {
    return context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH);
}

但如果设备有2个摄像头,如果有可用的闪光灯,我如何测试每个摄像头?

例如在Samsung S2设备上,使用前置摄像头时,在本机摄像头应用程序中,闪光灯按钮被禁用,这意味着无法使用。

感谢。

2 个答案:

答案 0 :(得分:12)

保罗的回答对我不起作用。 Galaxy Nexus上的前置摄像头具有FLASH_MODE_OFF的有效闪光模式,但它是唯一受支持的选项。此方法适用于所有情况:

private boolean hasFlash(){
    Parameters params = mCamera.getParameters();
    List<String> flashModes = params.getSupportedFlashModes();
    if(flashModes == null) {
        return false;
    }

    for(String flashMode : flashModes) {
        if(Parameters.FLASH_MODE_ON.equals(flashMode)) {
            return true;
        }
    }

    return false;
}

如果您的应用支持的不仅仅是FLASH_MODE_OFFFLASH_MODE_ON,那么您需要调整循环内的if-check。

答案 1 :(得分:7)

我自己想到这个,我在这里发布解决方案,实际上非常简单:

/**
 * Check if Hardware Device Camera can use Flash
 * @return true if can use flash, false otherwise
 */
public static boolean hasCameraFlash(Camera camera) {
    Camera.Parameters p = camera.getParameters();
    return p.getFlashMode() == null ? false : true;
}

上述方法与此不同:

/**
 * Checking availability of flash in device.
 * Obs.: If device has 2 cameras, this method doesn't ensure both cameras can use flash. 
 * @return true if a flash is available in device, false if not
 */
public static boolean isFlashAvailable(Context context) {
    return context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH);
}