赞
踩
一, 如何默认某个应用的权限:
1, 需要新建一个以.xml结尾的XML文件,例如default-permissions.xml
2,这个文件的内容如下:
<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<exceptions>
<exception package="com.mediatek.filemanager">
<permission name="android.permission.READ_EXTERNAL_STORAGE" fixed="true"/>
<permission name="android.permission.WRITE_EXTERNAL_STORAGE" fixed="true"/>
</exception>
</exceptions>
3,将这个文件拷贝到system/etc/default-permissions/default-permissions.xml这个目录下。
二,流程的分析
1,如何读取相应的XML文件(前面的流程大家可以自己追溯)
DefaultPermissionGrantPolicy.java中的
public void grantDefaultPermissions(int userId)-------》
private void grantDefaultPermissionExceptions(int userId)------》
private @NonNull ArrayMap<String, List<DefaultPermissionGrant>>readDefaultPermissionExceptionsLPw()---------》
private File[] getDefaultPermissionFiles()
到这个函数的时候可以看到,会去system/etc/default-permissions或者vendor/etc/default-permissions下去获取预置权限的xml文件。
2,权限预置如何生效
DefaultPermissionGrantPolicy.java中的这个函数中private void grantDefaultPermissionExceptions(int userId)------》
private void grantRuntimePermissionsLPw(PackageParser.Package pkg, Set<String> permissions,boolean systemFixed, int userId) ------------》
private void grantRuntimePermissionsLPw(PackageParser.Package pkg, Set<String> permissions,
boolean systemFixed, boolean isDefaultPhoneOrSms, int userId) -------------》
mService.updatePermissionFlags(permission, pkg.packageName,newFlags, newFlags, userId);-----------》
PackageManagerService.java中的public void updatePermissionFlags(String name, String packageName, int flagMask,int flagValues, int userId)----------》
mSettings.writeRuntimePermissionsForUserLPr(userId, false);-------》
Settings.java中的public void writeRuntimePermissionsForUserLPr(int userId, boolean sync)
最终会通过这个类将相应的权限写入data/system/users/0/runtime-permissions.xml这个文件中,供其他接口调用。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。