使用Android 23 +

时间:2016-09-08 23:41:12

标签: android android-permissions

我正在创建一个需要检查运行时权限的库。我已经让运行时权限正常工作,并且可以毫无问题地理解用例。

但是,我想确认使用我们的库的开发人员已将权限添加到其清单中。

库是一个基于位置的库,开发人员可以在清单中输入ACCESS_FINE_LOCATIONACCESS_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 +中还有其他方法吗?

2 个答案:

答案 0 :(得分:7)

关闭袖带,通过the requestedPermissions array检索PackageInfo。然后,查看PackageInfo中的Check,了解所有<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
}