android - 如何从 WebView 的 HTML 页面访问外部存储?
问题描述
我正在编写一个带有 WebView 前端的应用程序。我想让用户拍照,然后将它们嵌入到 HTML 中。
到目前为止,我设法实现了拍照并将它们存储在外部存储中,但我不知道如何从 HTML 访问它们,例如通过<img/>
标签。
我已经做过的步骤:
创建了一个外部存储的文件:
private fun createImageFile(): File { val storageDir = getExternalFilesDir(Environment.DIRECTORY_PICTURES) val file = File(storageDir, "pic.jpg") file.createNewFile() return file }
在清单中添加了必要的权限声明:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
由于这些是危险的权限,我确保它们在运行时被授予(省略代码,因为我已经仔细检查过它是否有效)。
@JavascriptInterface
通过向我的 HTML 页面公开文件 uri :@JavascriptInterface fun getSelfiePath() : String { return file.toURI().toString() }
我从我的
<img/>
标签中引用了 uri:function populatePicture() { let picDiv = document.getElementById("pic") picDiv.innerHTML = '<img src="' + controller.getPicturePath() + '" />' // getPicturePath() returns path in the format of: // /storage/emulated/0/Android/data/{package}/files/Pictures/pic.jpg }
我意识到所有这些都不是你所说的最小工作示例,但我发现很难提供一个,因为问题跨越了许多“领域”。
我用 URI 尝试了许多不同的方法,例如在它前面加上file:///
,但是没有一个奏效。更让我困惑的是,我不能以这种方式轻松访问编译时资源,但对于放置在外部存储中的资源,它根本不起作用。
什么是正确的方法?我觉得我在以下方面遗漏了一些东西:
- 从 HTML 访问外部存储。
或者
- 正确使用方法来生成 URI 字符串。
解决方案
推荐阅读
- cordova - Cordova 设备 UUID 是否与电容器设备 UUID 相同?
- javascript - 删除未使用的 JavaScript - babel asyncToGenerator.js - Webpack
- r - 有没有一种简单的方法来减去同一列中的行?
- node.js - 拔出串行设备会导致错误“错误文件描述符”;重新初始化串口最终会收到不一致的数据
- regex - 打印匹配 'pattern' 字符串的行,不包括 'pattern'
- c# - asp net core razor page分配id
- reactjs - 如何在 Windows 应用程序上安装 react-native-video?
- python - 我需要在 django 中为格式化的参考代码创建一个函数
- ruby-on-rails - Rails admin gem 显示 s3 附件,即 IMAGES/PDF/DOCS/XLSX
- python - json数组到熊猫数据框并将其写入csv