【问题标题】:Display local image in Android WebView on Marshmallow (ERR_ACCESS_DENIED)在 Marshmallow 上的 Android WebView 中显示本地图像 (ERR_ACCESS_DENIED)
【发布时间】: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


【解决方案1】:

我想通了。这比它应该的要困难得多。

这就是问题所在:
我使用 Android Marshmallow 设备作为我的测试设备。 READ_EXTERNAL_STORAGE 和 WRITE_EXTERNAL_STORAGE 的 &lt;uses-permission ../&gt; 标记似乎不适用于 Marshmallow。您需要使用新的权限 API 在运行时请求权限。

查看此问题的正确答案以获取代码:
READ_EXTERNAL_STORAGE permission for Android

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-09
    • 2011-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-28
    • 2020-01-27
    相关资源
    最近更新 更多