Delphi 11开发Android 12应用:本地HTML无法显示本地图片求助
解决Delphi 11 Android 12中本地HTML加载同目录图片的问题
核心问题本质
你碰到的问题是Android 12的文件权限限制,以及Content Provider URI的使用规范出错——直接用绝对路径或不完整的Content URI会被系统权限拦截,导致图片加载失败。
可行的解决方案
1. 修复img标签的Content URI写法
你之前的第三种写法缺少content://前缀,这是关键错误。正确的完整URI格式应为:
<img src="content://com.embarcadero.MyAppDir/fileprovider/external_public_files/MyAppDir/Pics/mypic.jpg"/>
如果HTML和图片在同一目录,也可以直接用相对路径,但前提是WebView加载HTML时使用的是你提供的完整Content URI(content://com.embarcadero.MyAppDir/fileprovider/external_public_files/MyAppDir/Pics/MyFile.html),此时WebView会自动以该URI的路径为基准解析相对路径,<img src="mypic.jpg"/>就能正确指向同目录图片。
2. 配置WebView的权限设置
在Delphi中初始化WebView时,必须显式开启相关权限以允许访问本地Content资源:
var WebSettings: TAndroidWebSettings; begin WebSettings := WebView1.Settings; WebSettings.AllowFileAccess := True; WebSettings.AllowContentAccess := True; WebSettings.AllowFileAccessFromFileURLs := True; // 关键:允许从文件URL加载关联资源 WebSettings.AllowUniversalAccessFromFileURLs := True; end;
Android 12对本地资源访问限制更严格,必须开启以上设置才能让WebView正常解析Content URI。
3. 验证FileProvider配置正确性
确保你的AndroidManifest.xml和路径配置文件正确映射了图片目录:
- AndroidManifest.xml中的Provider配置:
<provider android:name="androidx.core.content.FileProvider" android:authorities="com.embarcadero.MyAppDir.fileprovider" android:exported="false" android:grantUriPermissions="true"> <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/file_paths" /> </provider>
- res/xml/file_paths.xml中添加Pics目录的映射(根据实际存储路径调整):
<paths> <external-files-path name="external_public_files" path="MyAppDir/Pics/" /> </paths>
如果路径映射配置错误,Content URI将无法关联到实际文件,图片自然加载失败。
4. 手动注入base标签到HTML
如果相对路径仍不生效,可以在HTML的<head>中添加<base>标签指定基准路径:
<head> <base href="content://com.embarcadero.MyAppDir/fileprovider/external_public_files/MyAppDir/Pics/"/> </head>
之后所有相对路径的资源都会基于这个基准URL解析,直接用<img src="mypic.jpg"/>即可。
内容的提问来源于stack exchange,提问作者Daniel
相关产品推荐
相关产品推荐

