Search code examples
androidflashandroid-cameraandroid-package-managersfront-camera

How to detect front camera and flash availabiliy


Hi I am developing a custom video app. I am able to get the currentCameraId by

currentCameraId = Camera.CameraInfo.CAMERA_FACING_BACK;

I have two questions to ask:

1) How to detect android devices with only front camera.

Because on tablets with only front camera like in Micromax tab, the currentCameraId is 0.

2) How to check camera flash availability as the below code is not working on some of the phones

flash = this.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH);

Please Help.

Thanks!


Solution

  • To Check Flash Light is available or not

    boolean hasFlash = getApplicationContext().getPackageManager()
                    .hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH);
    

    To Check Camera is available or not

    PackageManager pm = context.getPackageManager();
    
    if (pm.hasSystemFeature(PackageManager.FEATURE_CAMERA)) {
    
    }
    

    If you are using API level 9 (Android 2.3) or above, you can do the following to calculate the index of the (first) front-facing camera:

    int getFrontCameraId() {
        CameraInfo ci = new CameraInfo();
        for (int i = 0 ; i < Camera.getNumberOfCameras(); i++) {
            Camera.getCameraInfo(i, ci);
            if (ci.facing == CameraInfo.CAMERA_FACING_FRONT) return i;
        }
        return -1; // No front-facing camera found
    }
    

    you can then use the index for the Camera.open

    For eg

    int index = getFrontCameraId();
    if (index == -1) error();
    Camera c = Camera.open(index);