我正在创建一个需要检查运行时权限的库。我已经让运行时权限正常工作,并且可以毫无问题地理解用例。
但是,我想确认使用我们的库的开发人员已将权限添加到其清单中。
库是一个基于位置的库,开发人员可以在清单中输入ACCESS_FINE_LOCATION
或ACCESS_COARSE_LOCATION
,我需要能够确定他们在运行时使用过哪个(或两者)。 / p>
我虽然使用包管理器检查权限会起作用但是这似乎总是失败:
PackageManager pm = getPackageManager();
int granted = pm.checkPermission(
Manifest.permission.ACCESS_COARSE_LOCATION,
getPackageName() );
if (granted == PackageManager.PERMISSION_GRANTED)
{
// Use coarse for runtime requests
}
// granted is always PackageManager.PERMISSION_DENIED
在Android v23 +中还有其他方法吗?
答案 0 :(得分:7)
关闭袖带,通过the requestedPermissions
array检索PackageInfo
。然后,查看PackageInfo
中的,了解所有<uses-permission>
- 请求的权限。
答案 1 :(得分:0)
感谢CommonsWare的回答,我创建了此方法Kotlin
来检查Manifest
上是否存在SMS权限
fun hasSmsPermissionInManifest(context: Context): Boolean {
val packageInfo = context.packageManager.getPackageInfo(context.packageName, PackageManager.GET_PERMISSIONS)
val permissions = packageInfo.requestedPermissions
if (permissions.isNullOrEmpty())
return false
for (perm in permissions) {
if (perm == Manifest.permission.READ_SMS || perm == Manifest.permission.RECEIVE_SMS)
return true
}
return false
}