一、背景
在做需求的时候有这样一个需求,当app声明了这个权限的时候就显示开关,在app没有声明这个权限的时候就不显示。因此获取Manifest中是否声明了这个权限就成了需要解决的问题。
二、解决思路
既然Android packageManger负责管理包信息的Manifest正好是包信息里的数据,查看一下官网是否有这样的api,果然packageInfo中是有权限信息的。
/**
* Overall information about the contents of a package. This corresponds
* to all of the information collected from AndroidManifest.xml.
*/
public class PackageInfo implements Parcelable {
/**
* Array of all {@link android.R.styleable#AndroidManifestPermission
* <permission>} tags included under <manifest>,
* or null if there were none. This is only filled in if the flag
* {@link PackageManager#GET_PERMISSIONS} was set.
*/
public PermissionInfo[] permissions;
}
三、代码实现
/**
* 获取Manifest 申请的权限
*/
@Synchronized
fun getManifestPermissions(activity: Activity): Array<String>? {
var packageInfo: PackageInfo? = null
try {
packageInfo = activity.packageManager.getPackageInfo(activity.packageName, PackageManager.GET_PERMISSIONS)
} catch (e: PackageManager.NameNotFoundException) {
e.printStackTrace()
}
if (packageInfo != null) {
return packageInfo.requestedPermissions
}
return null
}