2013-05-06 141 views
2

我知道是可能的,檢測是否相機閃光燈集成使用這樣的方法:的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個相機如何測試爲它們中的每如果有閃光燈可用?

例如在Samsung S2設備上,在使用前置攝像頭時的本機相機應用程序中,閃光燈按鈕被禁用,意味着不可用。

謝謝。

回答

11

保羅的回答沒有爲我工作。 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更多,你需要調整內循環,如果檢查。

+1

這非常有趣。不知道可以只有FLASH_MODE_OFF作爲選項......的確,這個解決方案似乎比我提出的解決方案更好。感謝您指出了這一點。 – Paul 2013-11-06 23:03:39

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