Android 如何检查设备是否有带反射的摄像头?

Android 如何检查设备是否有带反射的摄像头?,android,Android,我正在修改一个应用程序,以便它能在没有摄像头的KindleFire上工作 我没有任何安卓设备没有摄像头,所以我不知道下面的代码是否会对Kindle返回false。我之所以使用反射,是因为我的应用程序已经发布了与甜甜圈兼容的版本,而甜甜圈没有PackageManager.hasSystemFeature() 我假设甜甜圈设备都有摄像头——还没有给我带来麻烦 public static boolean isCameraAvailable(Context context){ PackageMa

我正在修改一个应用程序,以便它能在没有摄像头的KindleFire上工作

我没有任何安卓设备没有摄像头,所以我不知道下面的代码是否会对Kindle返回false。我之所以使用反射,是因为我的应用程序已经发布了与甜甜圈兼容的版本,而甜甜圈没有
PackageManager.hasSystemFeature()

我假设甜甜圈设备都有摄像头——还没有给我带来麻烦

public static boolean isCameraAvailable(Context context){
    PackageManager pm = context.getPackageManager();
    return tryHasSystemFeature(pm,"android.hardware.camera");
}

private static Method packageManager_hasSystemFeature;

static {
    initCompatibility();
};

private static void initCompatibility() {
    try {
        packageManager_hasSystemFeature = PackageManager.class.getMethod(
                "hasSystemFeature", new Class[] { String.class } );
    } catch (NoSuchMethodException nsme) {
        //leave the Method null
    }
}

static private boolean tryHasSystemFeature(PackageManager pm,String feature){
    if (packageManager_hasSystemFeature != null) {
        try {
            final Boolean hasIt = (Boolean) packageManager_hasSystemFeature.invoke(pm,feature);
            return hasIt.booleanValue();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
        }
    }
    return true;
}

实际上,如果要确保设备具有摄像头,建议在清单文件中添加此行:

<uses-feature android:name="android.hardware.camera" />


Market将阻止没有摄像头的设备下载您的应用程序。

我的应用程序确实使用摄像头。这并不重要,所以如果没有摄像头,我需要隐藏某些功能。否则,我将浪费时间尝试更新Kindle。谢谢。@TenFour04,您还可以考虑创建两个版本的应用程序:有摄像头支持和没有摄像头支持。Android Market支持多个apk,并将自动为用户提供适合其设备的正确版本。谢谢,我知道这是一个选项。但如果我能以某种方式测试我的上述代码,我就不必管理多个APK了。