我知道是有可能检测相机是否有闪光灯集成,使用这样的方法:
/**
* @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_OFF
和FLASH_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);
}