5

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

 /** 
 * @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 设备上,在使用前置摄像头时,在本机摄像头应用程序上,闪光灯按钮被禁用,这意味着不可用。

谢谢。

4

2 回答 2

16

保罗的回答对我不起作用。

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_OFFand FLASH_MODE_ON,则需要调整循环内的 if-check。

- 更新 -

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

    if (Camera.Parameters.FLASH_MODE_ON.equals(flashMode) || Camera.Parameters.FLASH_MODE_TORCH.equals(flashMode)) {
于 2013-11-06T16:29:15.890 回答
8

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

/**
 * 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);
}
于 2013-05-07T17:16:16.597 回答