如何在API级别23下检查权限?

时间:2016-05-25 05:28:06

标签: android android-permissions

我的一个应用拥有权限RECORD_AUDIO,我的应用targetSdkVersion为22.我无法在运行时检查权限。但我注意到如果我在Android 6.0及更高版本中安装我的应用程序。用户可以手动拒绝系统应用程序权限设置中的权限。所以我的问题是如何检查我的应用程序是否是API级别23下的盛大音频权限?

我搜索了很长时间,但只找到一些关于如何检查Android M权限的document

我注意到上下文有一个函数checkCallingOrSelfPermission,但它在Android 6.0下的行为很奇怪。我正在使用here中的解决方案。但我在系统应用程序设置中手动关闭应用程序权限后。我得到的结果不是我所期望的。

String permission = "android.permission.RECORD_AUDIO";
int ret = context.checkCallingPermission(permission);

忘记提及:

minSdkVersion 9
targetSdkVersion 22

编辑:

我注意到有solution将v4支持lib升级到v23。升级我的v4支持库会有点复杂。所以我想要另一个解决方案。

5 个答案:

答案 0 :(得分:13)

在API 22及以下版本中:

int permission = PermissionChecker.checkSelfPermission(context, permission);

if (permission == PermissionChecker.PERMISSION_GRANTED) {
    // good to go
} else {
    // permission not granted, you decide what to do
}

在API 23及以上版本中:

来自文档:

  

如果您的应用需要危险许可,则必须检查是否存在   每次执行需要的操作时都拥有该权限   那个许可。用户总是可以自由撤销权限,因此   即使应用程序昨天使用了相机,它也不能认为它仍然存在   今天有这个许可。

     

要检查您是否拥有权限,请致电   ContextCompat.checkSelfPermission()方法。例如,这个片段   显示如何检查活动是否有权写入   日历:

// Assume thisActivity is the current activity
int permissionCheck = ContextCompat.checkSelfPermission(thisActivity,
        Manifest.permission.WRITE_CALENDAR);
  

如果应用具有权限,则该方法返回   PackageManager.PERMISSION_GRANTED,应用程序可以继续   操作。如果应用程序没有权限,则返回该方法   PERMISSION_DENIED,应用程序必须明确要求用户   权限。

https://developer.android.com/training/permissions/requesting.html

答案 1 :(得分:3)

对于Api 22和更低版本,如果我没有错,你不需要检查运行时的权限,你只需要在AndroidManifest添加它们,应用程序只需要一次这个权限第一次安装时。所以你可能需要检查你的AndroidManifest,你可以把它添加到这里。

如果您想在Api 23以及较低版本上使用您的应用程序:

如果版本23或更高版本,您可以尝试使用if语句检查Sdk版本并在运行时请求严格的权限。

if (android.os.Build.VERSION.SDK_INT > 23) { /*Ask Dungerous Permissions here*/ }

也许它将解决Api 22及更低版本的问题。

您可以查看如何从Requesting Permissions at Run Time

询问runetime的权限

此外,您必须将Api 23编译添加到您的应用程序并将目标设为Api 23.

编辑:现在我看到你提到了,将你的支持库升级到v23很复杂,但我不明白为什么。您需要安装一些SDK并添加一些字符串以进行gradle。你使用自定义支持lib吗?

答案 2 :(得分:1)

答案 3 :(得分:0)

请仔细阅读link将指导您如何设置权限并减少执行权限的工作

答案 4 :(得分:0)

危险权限和特殊权限的示例 https://github.com/henrychuangtw/AndroidRuntimePermission

enter image description here