如何根据应用的包名获得这个应用的权限信息呢?貌似并没有什么方法开放我们用,通过查看“设置”的源代码,可以发现有个类:android.widget.AppSecurityPermissions的getPermissionsView的这个方法,可以获得应用的权限信息,并返回一个View对象。所以可以通过反射出android.widget.AppSecurityPermissions这个类,并执行getPermissionsView这个方法:
/**
* 根据包名得到应用的权限信息
* @param packName 包名
*/
private View getPermissions(String packName){
try {
//得到类加载器,并加载//"android.widget.AppSecurityPermissions"这个类
Classclazz= getClass().getClassLoader().loadClass("android.widget.App SecurityPermissions");
//得到android.widget.AppSecurityPermissions这类的一个的构造方法
Constructorconstructor = clazz.getConstructor(new Class[]{Context.class,String.class});
//实例化
bject object = constructor.newInstance(new Object[]{this,packName});
//得到getPermissionsView这个方法
Methodmethod = clazz.getDeclaredMethod("getPermissionsView", new Class[]{});
//执行getPermissionsView这个方法,得到返回值
View view = (View) method.invoke(object, new Object[]{});
return view;
} catch (Exception e) {
e.printStackTrace();
returnnull;
}
}
调用方法并将返回的View对象加入到布局中的,结果为: