AppOpsService 相关:
1.构造函数:
读取/data/system/appops.xml 下 权限相关设置信息;
2.权限检测:
SDK >23 时,调用ContextCompat::checkSelfPermission() 就可以检测是否有权限。
SDK <23 时,6.0 一下的系统,主要权限在权限清单中,都是返回true
3.权限的读取/修改:
1.系统最开始的权限配置卸载AppOpsManager.sOpDefaultMode[] 数组里;
2.开机后,PKMS 会生成/data/system/appops.xml ,此文件保存 appops 中各个pkg 的权限配置(注:appops.xml记录的不是实时的权限配置,权限的修改是有延时的)
3.修改权限调用AppOpsManag.setMode,主要修改的是AppOpsService 维护的一个包含 op 这个单位变量的数组,各个权限对应的 op 是实时变化的,但是同步到 appops.xml 上是有时间延时的!!!同步到appops.xml 上是直接将AppOpsService 上所有的op 一次性全部同步到appops.xml 上。
4.获取的pkg 对应权限的状态是获取此pkg 对应是op 的状态,并没有直接读取 appops.xml 这个文件!!!!
5.AppOpsService 里的op类 初始化时,op.mode 就是直接获取AppOpsManager.sOpDefaultMode[]这个数组里配置的信息,所以创建了op 后,最后同步到appops.xml 上时就是把sOpDefaultMode[] 数组的配置信息写到appops.xml 里了。
6. op类的成员变量uid , packageName ,mode
AppOpsManager 相关:
1. public int checkOpNoThrow(String op, int uid, String packageName)