Android test if front camera supports flash

前端 未结 2 1568
感动是毒
感动是毒 2020-12-06 08:29

I know is possible to detect if camera has flash integrated, using a method like this:

 /** 
 * @return true if a flash is available, false if not
 */
public         


        
相关标签:
2条回答
  • 2020-12-06 08:44

    Paul's answer didn't work for me.

    The front camera on a Galaxy Nexus has a valid flash-mode of FLASH_MODE_OFF, but it is the only supported option. This method will work in all situations:

        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;
        }
    

    If your app supports more than just FLASH_MODE_OFF and FLASH_MODE_ON, you'll need to tweak the if-check inside the loop.

    -- Update --

    Also you can add torch for flash in if condition if you really need to use torch.

        if (Camera.Parameters.FLASH_MODE_ON.equals(flashMode) || Camera.Parameters.FLASH_MODE_TORCH.equals(flashMode)) {
    
    0 讨论(0)
  • 2020-12-06 08:48

    I figured this by myself and I post here the solution, which is actually very simple:

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

    The above method is different by this one:

    /**
     * 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);
    }
    
    0 讨论(0)
提交回复
热议问题