在 Android 开发中,加载本地 HTML 文件主要通过 `WebView` 组件实现,以下是具体的路径配置方法和相关知识:
1. assets 目录
- 路径格式:`file:///android_asset/文件名.html`
- 特点:文件打包在 APK 中,无法动态修改。需将 HTML 文件放在 `src/main/assets` 目录下,通过 `WebView.loadUrl("file:///android_asset/example.html")` 加载。
- 扩展:支持子目录结构,例如 `file:///android_asset/html/example.html`。
2. res/raw 目录
- 路径格式:通过资源 ID 引用,需手动读取文件内容并转为字符串。
- 示例:
java
InputStream inputStream = getResources().openRawResource(R.raw.example);
String html = convertStreamToString(inputStream); // 自定义转换方法
webView.loadData(html, "text/html", "UTF-8");
- 限制:文件需编译为二进制资源,适合小型静态 HTML。
3. 内部存储(Internal Storage)
- 路径格式:`file:///data/data/包名/files/文件名.html`
- 使用场景:动态生成或下载的 HTML 文件。通过 `Context.getFilesDir()` 获取路径,写入文件后加载:
java
File file = new File(getFilesDir(), "example.html");
webView.loadUrl("file://" + file.getAbsolutePath());
- 权限:无需额外权限,仅应用内可访问。
4. 外部存储(External Storage)
- 路径格式:`file:///storage/emulated/0/Android/data/包名/files/文件名.html`
- 条件:需声明 `READ_EXTERNAL_STORAGE` 权限(Android 10+ 使用分区存储时受限)。
- 适配:Android 11+ 推荐通过 `MediaStore` 或 `ACTION_OPEN_DOCUMENT` 访问公共文件。
5. SD 卡路径
- 路径示例:`file:///mnt/sdcard/自定义目录/example.html`
- 注意:路径因设备厂商可能不同,需动态检测。Android 6.0+ 需运行时权限。
扩展知识:
安全限制:Android 7.0+ 禁止 `WebView` 直接通过 `file://` 加载跨域资源,需使用 `FileProvider` 共享文件。
混合内容:若 HTML 引用本地 CSS/JS,需确保路径与主 HTML 文件保持一致,或使用相对路径。
编码问题:非 ASCII 文件名可能导致加载失败,建议使用 URL 编码处理路径。
示例代码(FileProvider 适配):
java
File file = new File(getFilesDir(), "example.html");
Uri uri = FileProvider.getUriForFile(this, "com.example.provider", file);
webView.loadUrl(uri.toString());
根据实际需求选择合适的路径方案,并注意权限和系统版本兼容性。