我的一个应用拥有权限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支持库会有点复杂。所以我想要另一个解决方案。
答案 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)