我想在尝试打开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。
为什么会这样?
答案 0 :(得分:5)
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;
}