pm.hasSystemFeature(PackageManager.FEATURE_CAMERA_ANY)没有给出corerct答案

时间:2013-10-18 20:17:23

标签: android camera android-camera android-package-managers android-hardware

我想在尝试打开qr代码阅读器之前检查设备是否有任何相机。

我有以下代码:

 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。

为什么会这样?

2 个答案:

答案 0 :(得分:5)

对于任何4.2之前的设备,

FEATURE_CAMERA_ANY was added in Android 4.2. hasSystemFeature(PackageManager.FEATURE_CAMERA_ANY)应该返回false。如果你的S3仍然在4.1,这可以解释你的问题。

答案 1 :(得分:2)

说清楚。

FEATURE_CAMERA_ANY已添加到Android 4.2(API-17):Android - developers

代码:

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

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

然后你应该知道使用FEATURE_CAMERA_ANY功能(使用android 4.2及更高版本)时模拟器存在错误。见:Emulator does not honour Camera support flag

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

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