我试图查看一个HTML文件,它根据作用域存储存储在我的应用程序目录中,确切的HTML文件url是"file:///data/user/0/my.app.package/files/Download/page_1.html"
,但是我打开失败: ENOENT (没有这样的文件或目录)错误。我可以手动看到该文件存在于该路径上。我的目标sdk版本是30,Android 11,我不能改变它--我需要它在android 11上工作。我如何修复它?
我已经尝试过的
Android:supportsRtl=“真”
android:usesCleartextTraffic="true"
中的文件。
发布于 2021-08-16 15:44:50
几周前,我遇到了同样的问题,您需要改变访问HTML文件的方式。
您应该使用WebViewAssetLoader。
https://developer.android.com/reference/androidx/webkit/WebViewAssetLoader
发布于 2021-10-06 09:18:07
binding.webView.apply {
visible()
settings.apply {
useWideViewPort = true
loadWithOverviewMode = true
builtInZoomControls = true
displayZoomControls = false
allowFileAccess = false
allowFileAccessFromFileURLs = false
allowUniversalAccessFromFileURLs = false
allowContentAccess = true
}
val contentUri = FileProvider.getUriForFile(
this@YourActivity,
"${BuildConfig.APPLICATION_ID}.provider",
File(yourHtmlFilePath!!)
)
webViewClient = MyWebClient(this@YourActivity)
contentUri?.let { loadUrl(contentUri.toString()) }
}
MyWebClient
类是
class MyWebClient(context: Context) : WebViewClientCompat() {
private val assetLoader: WebViewAssetLoader = WebViewAssetLoader.Builder()
.addPathHandler(
"/public/", WebViewAssetLoader.InternalStoragePathHandler(
context,
File(context.filesDir, "public")
)
)
.build()
override fun shouldInterceptRequest(
view: WebView,
request: WebResourceRequest
): WebResourceResponse? {
return assetLoader.shouldInterceptRequest(request.url)
}
override fun shouldOverrideUrlLoading(view: WebView, request: WebResourceRequest): Boolean {
return if (request.isForMainFrame) {
view.context.startActivity(
Intent(Intent.ACTION_VIEW, request.url)
)
true
} else false
}
}
发布于 2021-11-09 07:31:03
只需添加以下代码即可。
WebSettings settings = mWebView.getSettings();
settings.setAllowFileAccess(true);
https://stackoverflow.com/questions/68803565
复制相似问题