You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MAUI Android WebView无法加载本地网页问题求助

Android WebView加载本地文件ERR_ACCESS_DENIED问题解决

问题描述

应用下载的网页文件mydownloadedpage.html存储路径为/data/user/0/com.xyx.qwerty/files/storage/mydownloadedpage.html,iOS端WebView可正常加载,但Android端直接传入完整路径到WebView的Source属性时,触发ERR_ACCESS_DENIED错误。

当前使用的WebView代码:

<WebView Source="/data/user/0/com.xyx.qwerty/files/storage/mydownloadedpage.html"/>

已尝试的配置:

  • 在AndroidManifest.xml中添加存储权限:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
  • 添加android:usesCleartextTraffic="true"配置

上述操作未解决问题,需实现Android端WebView正常加载该本地网页。


解决方法

1. 补充file:///协议前缀

Android WebView加载本地文件必须明确指定file:///协议,直接传绝对路径会被WebView的安全机制拦截。修改Source属性:

<WebView Source="file:///data/user/0/com.xyx.qwerty/files/storage/mydownloadedpage.html"/>

2. 开启WebView本地文件访问权限

针对Android 11及以上版本,即使应用拥有存储权限,WebView默认限制访问应用私有目录文件。需在WebView设置中开启相关权限:

WebSettings webSettings = webView.getSettings();
webSettings.setAllowFileAccess(true);
webSettings.setAllowFileAccessFromFileURLs(true); // 允许从本地文件URL加载关联资源(如CSS、JS)
webSettings.setAllowUniversalAccessFromFileURLs(true);

注:如果使用React Native、Flutter等跨平台框架,需对应配置框架WebView组件的参数开启上述权限。

3. 使用FileProvider共享私有目录文件(推荐适配Android 10+)

Android 10及以上的分区存储机制,直接访问应用私有目录文件易触发权限限制,建议通过FileProvider生成Content URI加载:

  1. 在AndroidManifest.xml注册FileProvider:
<provider
    android:name="androidx.core.content.FileProvider"
    android:authorities="com.xyx.qwerty.fileprovider"
    android:exported="false"
    android:grantUriPermissions="true">
    <meta-data
        android:name="android.support.FILE_PROVIDER_PATHS"
        android:resource="@xml/file_paths" />
</provider>
  1. 在res/xml/file_paths.xml定义文件路径映射:
<?xml version="1.0" encoding="utf-8"?>
<paths>
    <files-path name="storage" path="storage/" />
</paths>
  1. 通过FileProvider获取Content URI并加载:
File localFile = new File(getFilesDir(), "storage/mydownloadedpage.html");
Uri contentUri = FileProvider.getUriForFile(this, "com.xyx.qwerty.fileprovider", localFile);
webView.loadUrl(contentUri.toString());

4. 清理冗余权限配置

你的文件存储在应用私有目录/data/user/0/.../files/下,该目录属于应用默认可访问范围,无需申请READ_EXTERNAL_STORAGE和WRITE_EXTERNAL_STORAGE权限(Android 10+这些权限对私有目录无效),可从AndroidManifest.xml中移除这两个权限声明。


内容的提问来源于stack exchange,提问作者Isidoros Moulas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 09:25:33