【发布时间】:2016-02-19 03:45:25
【问题描述】:
我希望能够在 WebView 中的 /sdcard/Pictures/ 和 /sdcard/Download/ 等本地目录中显示图像。
这是我尝试过的:
我有一个名为“levels.png”的图像文件,我将它从我的计算机复制到我的设备。它位于我可以通过计算机访问的内部存储的“根”。这是 /sdcard/ 路径。
String base = Environment.getExternalStorageDirectory().getAbsolutePath();
String imagePath = "file://" + base + "/levels.png";
String html = "<html><head></head><body><img src=\""+ imagePath + "\"></body></html>";
loadDataWithBaseURL("", html, "text/html","utf-8", "");
上面的代码只是显示了一个损坏的图像图标。
loadUrl("file:///"+ Environment.getExternalStorageDirectory().getAbsolutePath() +"/levels.png");
这段代码向我显示了“网页不可用”页面,其中的 android.xml 是颠倒的。它说:
无法加载位于 file:///storage/emulated/0/levels.png 的网页,因为: 网络::ERR_ACCESS_DENIED
如果我将文件名更改为我知道不存在的文件,我会得到 ERR_FILE_NOT_FOUND。因此,该应用程序似乎找到了该文件,但由于权限问题而无法访问它。在我的清单中,我有:
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
我还在我的 WebView 中调用 loadUrl 之前的所有这些方法:
getSettings().setAllowFileAccess(true);
getSettings().setJavaScriptEnabled(true);
getSettings().setAllowFileAccessFromFileURLs(true);
getSettings().setAllowContentAccess(true);
我只能找到从应用程序的资产文件夹中加载图像的解决方案,但这不是我想要做的。我希望能够简单地指定设备上图像的确切路径并将其显示在 WebView 中。 (我保证我正在尝试做的事情对我的应用程序有意义)。
【问题讨论】:
-
我的问题是权限问题。请参阅下面的答案,以了解解决方案与可能的重复项不同。我需要能够访问存储在设备存储中任何位置的图像并将它们显示在 WebView 中。尽管清单中有正确的权限,但我仍然收到一条错误消息,提示访问被拒绝。我发现这是因为 Marshmallow 的新权限系统。我编辑了标题以增加清晰度。
标签: android html image webview