admin管理员组文章数量:1122846
I am trying to load an HTML file that I generate upon app's start, saved to:
/data/data/com.me.myapp/files/autogen.html
using:
public class FileUtils {
public static void saveToInternalFile(Context ctx, String fname, String html) {
try (var fos = Files.newOutputStream(
Paths.get(ctx.getFilesDir().getAbsolutePath(), fname),
StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING)) {
fos.write(html.getBytes(StandardCharsets.UTF_8));
} catch (IOException e) {
e.printStackTrace();
}
}
public static String constructInternalFileUrl(Context ctx, String filename) {
return "file://" + new File(ctx.getFilesDir(), filename).getAbsolutePath();
}
}
Using Device Explorer
, I verified the file exists and is perfectly readable on Edge, Firefox and Chrome.
But attempting to load in the same app that created it (same runtime session) into WebView, as the following URL:
file:///data/user/0/com.me.myapp/files/autogen.html
results in
The webpage at file:///data/user/0/com.me.myapp/files/autogen.html could not be loaded because: net::ERR_ACCESS_DENIED
This is despite taking care of settings the relevant WebView flags:
WebSettings webSettings = getSettings();
webSettings.setDomStorageEnabled(true);
webSettings.setAllowContentAccess(true);
webSettings.setAllowFileAccessFromFileURLs(true);
webSettings.setAllowUniversalAccessFromFileURLs(true);
What could I be missing?
Please note: This is not a duplicate of
- net::ERR_ACCESS_DENIED (file:///data/user/0/packagename/files/appname/app_id/idex.html) in android
- ERR_ACCESS_DENIED in webview in Android - only with sdk 30
because I have already implemented everything suggested on those threads, without much success.
I am trying to load an HTML file that I generate upon app's start, saved to:
/data/data/com.me.myapp/files/autogen.html
using:
public class FileUtils {
public static void saveToInternalFile(Context ctx, String fname, String html) {
try (var fos = Files.newOutputStream(
Paths.get(ctx.getFilesDir().getAbsolutePath(), fname),
StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING)) {
fos.write(html.getBytes(StandardCharsets.UTF_8));
} catch (IOException e) {
e.printStackTrace();
}
}
public static String constructInternalFileUrl(Context ctx, String filename) {
return "file://" + new File(ctx.getFilesDir(), filename).getAbsolutePath();
}
}
Using Device Explorer
, I verified the file exists and is perfectly readable on Edge, Firefox and Chrome.
But attempting to load in the same app that created it (same runtime session) into WebView, as the following URL:
file:///data/user/0/com.me.myapp/files/autogen.html
results in
The webpage at file:///data/user/0/com.me.myapp/files/autogen.html could not be loaded because: net::ERR_ACCESS_DENIED
This is despite taking care of settings the relevant WebView flags:
WebSettings webSettings = getSettings();
webSettings.setDomStorageEnabled(true);
webSettings.setAllowContentAccess(true);
webSettings.setAllowFileAccessFromFileURLs(true);
webSettings.setAllowUniversalAccessFromFileURLs(true);
What could I be missing?
Please note: This is not a duplicate of
- net::ERR_ACCESS_DENIED (file:///data/user/0/packagename/files/appname/app_id/idex.html) in android
- ERR_ACCESS_DENIED in webview in Android - only with sdk 30
because I have already implemented everything suggested on those threads, without much success.
Share Improve this question edited yesterday sfinja asked yesterday sfinjasfinja 7547 silver badges14 bronze badges1 Answer
Reset to default 1From looking at Android's source code at:
https://android.googlesource.com/platform/packages/apps/Browser2/+/master/src/org/chromium/webview_shell/WebViewBrowserActivity.java
It appears that WebView settings are necessary but not sufficient:
private void loadUrl(String url) {
// Request read access if necessary
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M
&& "file".equals(Uri.parse(url).getScheme())
&& PackageManager.PERMISSION_DENIED
== checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE)) {
requestPermissionsForPage(new FilePermissionRequest(url));
}
// If it is file:// and we don't have permission, they'll get the "Webpage not available"
// "net::ERR_ACCESS_DENIED" page. When we get permission, FilePermissionRequest.grant()
// will reload.
mWebView.loadUrl(url);
mWebView.requestFocus();
}
Did you include in your AndroidManifest.xml the following?
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
Updating my answer as a response to the comment by the OP:
You have almost all settings set properly for that :
WebSettings webSettings = getSettings();
webSettings.setJavaScriptEnabled(true);
webSettings.setDomStorageEnabled(true);
webSettings.setAllowFileAccess(true);
webSettings.setAllowContentAccess(true);
webSettings.setAllowFileAccessFromFileURLs(true);
webSettings.setAllowUniversalAccessFromFileURLs(true);
IOW, what you are (probably) missing is
webSettings.setAllowFileAccess(true);
本文标签: androidnetERRACCESSDENIED despite setting all relevant WebView flagsStack Overflow
版权声明:本文标题:android - net::ERR_ACCESS_DENIED despite setting all relevant WebView flags - Stack Overflow 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1736282353a1926617.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论