荣耀设备如何通过FileProvider获取/data/hw_init路径下文件的Uri
问题原因
你遇到的报错是因为当前的provider_paths.xml没有配置/data/hw_init路径的访问权限,FileProvider默认内置的路径标签(如files-path、cache-path、external-path等)仅覆盖Android原生定义的常规存储路径,荣耀自定义的/data/hw_init分区路径不在默认覆盖范围内,所以调用FileProvider.getUriForFile时会抛出IllegalArgumentException。
解决步骤
- 修改你的
res/xml/provider_paths.xml文件,新增root-path标签配置,覆盖/data/hw_init路径:
<?xml version="1.0" encoding="utf-8"?> <paths xmlns:android="http://schemas.android.com/apk/res/android"> <!-- 原有已配置的其他路径正常保留即可 --> <files-path name="files" path="." /> <external-path name="external" path="." /> <!-- 新增下方这行配置,专门授权/data/hw_init路径的访问权限 --> <root-path name="hw_init" path="data/hw_init/" /> </paths>
说明:
root-path对应的是设备根目录/,配置path="data/hw_init/"仅会授权该路径下的文件访问权限,不会额外扩大授权范围,不会引入额外安全风险。
- 确认应用已获取
/data/hw_init路径的读取权限:
- 该路径属于荣耀系统预置资源分区,普通应用默认无读取权限,你可以先通过
file.exists()和file.canRead()方法验证当前应用是否可以访问目标文件 - 部分荣耀系统版本可通过申请
android.permission.READ_EXTERNAL_STORAGE权限间接获取该路径访问权限,若仍无法访问,可前往荣耀开发者平台查询对应预置资源的专属访问规则。
- 原有获取Uri的代码无需修改,配置完成后即可正常获取对应路径的文件Uri。
内容的提问来源于stack exchange,提问作者Nik
相关产品推荐
相关产品推荐

