Zapnologica
Zapnologica

Reputation: 22566

pm.hasSystemFeature(PackageManager.FEATURE_CAMERA_ANY) not giving corerct answer

I want to check if a device has any cameras before trying to open a qr code reader.

I have the following code:

 public boolean checkDeviceCompatibility() {

PackageManager pm = context.getPackageManager();

if (pm.hasSystemFeature(PackageManager.FEATURE_CAMERA_ANY)) {
    if (pm.hasSystemFeature(PackageManager.FEATURE_CAMERA)) {
    return true;
    } else {
    // use front camera
    Toast.makeText(
        context,
        "This device does not have a back camera so it has automatically reverted to the front camera",
        Toast.LENGTH_SHORT).show();
    return true;
    }
} else {
    util.displayErrorDialog(
        context,
        "This device does not have any cameras and therefore cannot make use of the QR Code feature.");
    return false;
}
}

But now if I run this code in debug mode on my galaxy S3 with two cameras. the first if statement is returned false.

Why could this be?

Upvotes: 3

Views: 4752

Answers (2)

Maher Abuthraa
Maher Abuthraa

Reputation: 17844

To make it clear.

FEATURE_CAMERA_ANY was added to Android 4.2 ( API-17): Android - developers.

code:

public static boolean hasCamera(Context context) {
    return context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_ANY);
}

Note that using this code will return false if device under version 4.2:

Then you should know that there is a bug with emulator when use FEATURE_CAMERA_ANY feature (with android 4.2 and above). see: Emulator does not honour Camera support flag

Thats why Im still using old way even its deprecated:

public static boolean hasCamera() {
    return android.hardware.Camera.getNumberOfCameras() > 0;
}

Upvotes: 3

CommonsWare
CommonsWare

Reputation: 1007544

FEATURE_CAMERA_ANY was added in Android 4.2. hasSystemFeature(PackageManager.FEATURE_CAMERA_ANY) should return false for any pre-4.2 device. If your S3 is still on 4.1, that would explain your problem.

Upvotes: 6

Related Questions