pp在使用定位服务的时候,一般是通过LocationManager的requestLocationUpdates获取定位,其实是通过Binder请求LocationManagerService去定位。
定位服务LocationManagerService会向AppOpsService查询是否授予了App定位权限,如果需要授权,就弹出一个系统对话框让用户操作,并根据用户的操作将结果持久化在文件中,如果在Setting里设置了响应的权限,也会去更新相应的权限操作持久化文件/data/system/appops.xml,下次再次申请服务的时候,服务会再次鉴定权限
Android6.0的runtime-permission机制让用户在任何时候都可以取消授权,因此,每次在申请系统服务的时候,都要动态查询是否获取了相应的权限,如果没有获取,就需要动态去申请,首先先看一下权限的查询:
Android6.0权限查询
support-v4兼容包里面提供了一个工具类PermissionChecker,可以用来检查权限获取情况
最终还是调用PackageManager去更新App的运行时权限,最终走进PackageManagerService服务,
在目录data/system/0/runtime-permissions.xml存放需要运行时申请的权限,Android6.0以上才有