使用 Android 确定清单中是否存在权限 23+
Determine whether a permission is present in the manifest with Android 23+
我正在创建一个需要检查运行时权限的库。我的运行时权限运行良好并且理解用例没有问题。
不过,我想确认使用我们库的开发人员已将权限添加到他们的清单中。
该库是一个基于位置的库,开发人员可以在清单中输入 ACCESS_FINE_LOCATION
或 ACCESS_COARSE_LOCATION
,我需要能够确定他们在运行时使用了哪个(或两者) .
我虽然使用包管理器来检查权限是可行的,但是这似乎总是失败:
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+ 中还有其他方法可以做到这一点吗?
即兴发挥,通过 PackageInfo
中的 PackageManager
and getPackageInfo(getPackageName(), PackageManager.GET_PERMISSIONS)
. Then, look at the requestedPermissions
array 检索 PackageInfo
,以获得所有 <uses-permission>
请求的权限。
感谢 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
}
或
fun Context.hasSmsPermissionInManifest(): Boolean {
val packageInfo = packageManager.getPackageInfo(packageName, PackageManager.GET_PERMISSIONS)
val permissions = packageInfo.requestedPermissions
return permissions?.any { perm -> perm == Manifest.permission.READ_SMS || perm == Manifest.permission.RECEIVE_SMS } ?: false
}
我正在创建一个需要检查运行时权限的库。我的运行时权限运行良好并且理解用例没有问题。
不过,我想确认使用我们库的开发人员已将权限添加到他们的清单中。
该库是一个基于位置的库,开发人员可以在清单中输入 ACCESS_FINE_LOCATION
或 ACCESS_COARSE_LOCATION
,我需要能够确定他们在运行时使用了哪个(或两者) .
我虽然使用包管理器来检查权限是可行的,但是这似乎总是失败:
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+ 中还有其他方法可以做到这一点吗?
即兴发挥,通过 PackageInfo
中的 PackageManager
and getPackageInfo(getPackageName(), PackageManager.GET_PERMISSIONS)
. Then, look at the requestedPermissions
array 检索 PackageInfo
,以获得所有 <uses-permission>
请求的权限。
感谢 CommonsWare 的回答,我创建了这个方法 Kotlin
来检查 Manifest
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
}
或
fun Context.hasSmsPermissionInManifest(): Boolean {
val packageInfo = packageManager.getPackageInfo(packageName, PackageManager.GET_PERMISSIONS)
val permissions = packageInfo.requestedPermissions
return permissions?.any { perm -> perm == Manifest.permission.READ_SMS || perm == Manifest.permission.RECEIVE_SMS } ?: false
}