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



我知道是有可能检测相机是否有闪光灯集成,使用这样的方法:

 /** 
 * @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个摄像头,如果有闪光灯,我如何测试每个摄像头?

例如在三星S2设备上,在本机相机应用程序中,当使用前置摄像头时,闪光按钮被禁用,这意味着不可用。

谢谢。

Paul的回答对我不起作用。

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。

—Update—

也可以在if条件下添加torch闪光,如果你真的需要使用火炬。

    if (Camera.Parameters.FLASH_MODE_ON.equals(flashMode) || Camera.Parameters.FLASH_MODE_TORCH.equals(flashMode)) {

我自己想到了这个问题,我在这里发布了解决方案,这实际上很简单:

/**
 * 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);
}

最新更新