1

我想在尝试打开二维码阅读器之前检查设备是否有摄像头。

我有以下代码:

 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;
}
}

但是现在,如果我在我的 Galaxy S3 上使用两个摄像头在调试模式下运行此代码。第一个 if 语句返回 false。

为什么会这样?

4

2 回答 2

5

FEATURE_CAMERA_ANY在 Android 4.2 中添加。 hasSystemFeature(PackageManager.FEATURE_CAMERA_ANY)应该返回false任何 4.2 之前的设备。如果您的 S3 仍在 4.1 上,那将解释您的问题。

于 2013-10-18T21:18:41.220 回答
2

说清楚。

FEATURE_CAMERA_ANY已添加到 Android 4.2 (API-17):Android-开发人员

代码:

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

请注意,如果设备版本低于 4.2,则使用此代码将返回 false:

那么你应该知道使用FEATURE_CAMERA_ANY功能时模拟器存在错误(android 4.2及更高版本)。请参阅:模拟器不支持相机支持标志

这就是为什么我仍然使用旧方式,即使它已被弃用:

public static boolean hasCamera() {
    return android.hardware.Camera.getNumberOfCameras() > 0;
}
于 2016-11-18T11:59:46.027 回答