我怎么知道我的应用程序的相机权限是否被授予?

时间:2015-11-25 15:23:52

标签: android

我想知道我的应用程序的相机权限是否被授予。然后我写了下面的函数,但它们总是返回不正确的结果。无论我如何在系统设置中禁用我的应用程序的相机权限,这两个功能始终返回TRUE。你知道我的代码有什么不对吗?

public static boolean checkCameraPermission() {
    String permission = "android.permission.CAMERA";
    int res = App.getInstance().checkCallingOrSelfPermission(permission);
    return (res == PackageManager.PERMISSION_GRANTED);
}

public static boolean checkCameraPermission(Context context) {
    PackageManager pm = context.getPackageManager();
    boolean permission = (PackageManager.PERMISSION_GRANTED ==
            pm.checkPermission("android.permission.CAMERA", pm.getNameForUid(Binder.getCallingUid())));
    return permission;
}

1 个答案:

答案 0 :(得分:4)

  

我想知道我的应用程序的相机许可是否被授予

如果您的targetSdkVersion为23或更高,并且您使用的是Android 6.0及更高版本设备,请使用checkSelfPermission()checkSelfPermission()的原生实施位于Context; ContextCompat的版本不会在较旧的Android设备上崩溃。

如果您的targetSdkVersion为22或更低,或者您在Android 5.1或更早版本的设备上运行,则您始终拥有所请求的权限(例外:可能是某些自定义ROM)。

如果您的targetSdkVersion为22或更低,并且您使用的是Android 6.0或更高版本的设备,则根据问题中列出的方法,您始终拥有所请求的权限。用户在“设置”中可以阻止您访问与这些权限相关联的数据,但从技术上讲,用户实际上并没有自行撤销权限(尽管我们经常说这只是为了简化说明)。我知道您无法确定用户是否阻止您的相机访问,除了在您尝试访问相机时捕获相关的例外情况。请注意,这些例外情况将在其他情况下引发(例如,摄像头访问被设备策略阻止)。