How can I check if a device has a camera led (flashlight). I am talking about devices with android OS?
I have seen solutions some solutions which talks about how to turn the led on and off but what will happen if the device doesn't even has a led.
for turning on the camera I am using camera.open()
The other answers
boolean hasFlash = this.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH);
Does not work for the new 2013 Nexus 7. The following code will work:
public boolean hasFlash() {
if (camera == null) {
return false;
}
Camera.Parameters parameters = camera.getParameters();
if (parameters.getFlashMode() == null) {
return false;
}
List<String> supportedFlashModes = parameters.getSupportedFlashModes();
if (supportedFlashModes == null || supportedFlashModes.isEmpty() || supportedFlashModes.size() == 1 && supportedFlashModes.get(0).equals(Camera.Parameters.FLASH_MODE_OFF)) {
return false;
}
return true;
}
getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH)
returns true if the device has flash. See this for more details
You should be able to check whether the flash is available by checking system features:
boolean hasFlash = this.getPackageManager()
.hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH);
(provided you are in an Activity
). If not, than use some sort of context
in place of this
.
P.S. Note that this information is quite easy to find if you actually try searching for it.
PackageManager pm = context.getPackageManager();
if (!pm.hasSystemFeature(PackageManager.FEATURE_CAMERA)) {
Log.e("err", "Device has no camera!");
return;
}
camera = Camera.open();
p = camera.getParameters();
flashModes = p.getSupportedFlashModes();
if(flashModes==null){
Toast.makeText(getApplicationContext(), "LED Not Available",Toast.LENGTH_LONG).show();
}else
{
Toast.makeText(getApplicationContext(), "LED Available",Toast.LENGTH_LONG).show();
}