Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android/Java: detect if device has a BACK Camera

How do I detect if the device has a camera on the BACK?

This is my code to detect if the device has a Flashlight:

if (context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH) 
    || (_camera.getParameters().getSupportedFlashModes() != null)) hasFlashlight = true;
else hasFlashlight = false;

But it is TRUE even if the device only has a Front Camera without the flashlight.

like image 881
Yousha Aleayoub Avatar asked Sep 29 '14 19:09

Yousha Aleayoub


1 Answers

For API >= 9 : you can use Camera.getCameraInfo with something like this :

int backCameraId = -1;
for(int i=0;i<Camera.getNumberOfCameras();i++){
    CameraInfo cameraInfo = new CameraInfo();
    Camera.getCameraInfo(i,cameraInfo);
    if(cameraInfo.facing==CameraInfo.CAMERA_FACING_BACK) {
        backCameraId = i;
        break;
    }
}
Log.d(TAG, "back camera exists ? "+(backCameraId>-1));
Log.d(TAG, "back camera id  :"+backCameraId);

For API >= 21, you are advised to use the Camera2 API :

String backCameraId = null;
CameraManager manager = (CameraManager) getSystemService(Context.CAMERA_SERVICE);
for(String cameraId:manager.getCameraIdList()){
    CameraCharacteristics cameraCharacteristics = manager.getCameraCharacteristics(cameraId);
    Integer facing = cameraCharacteristics.get(CameraCharacteristics.LENS_FACING);
    if(facing==CameraMetadata.LENS_FACING_BACK) {
        backCameraId = cameraId;
        break;
    }
}
Log.d(TAG, "back camera exists ? "+(backCameraId!=null));
Log.d(TAG, "back camera id  :"+backCameraId);
like image 198
ben75 Avatar answered Sep 29 '22 04:09

ben75