我正在使用WebViewAssetLoader作为本地提供文件的方式,我面临的问题非常令人沮丧,即当应用程序第一次安装时,它无法在WebView中加载内容。如果我杀死应用程序并再次运行它,它就可以完美地工作(但我不能要求用户这样做)。此外,如果应用程序是通过Android Studio第二次安装的,则它可以正常工作,但如果应用程序从未安装过,则始终会失败。
这是logcat的结果。
2019年11月18日16:58:40.439 21492-21492 /?E / Zygote:isWhitelistProcess-进程已列入白名单 2019年11月18日16:58:40.439 21492-21492 /?E / Zygote:accessInfo:1 2019年11月18日16:58:40.628 21492-21544 com.my.app.dev.debug E / GraphicsEnv:无法获取GPU服务 2019年11月18日16:58:40.805 21492-21492 com.my.app.dev.debug E / chromium:[ERROR:filesystem_posix.cc(89)]stat / data / user / 0 / com.my.app.dev.debug / cache / WebView / Crashpad:没有该文件或目录(2) 2019年11月18日16:58:40.805 21492-21492 com.my.app.dev.debug E / chromium:[ERROR:filesystem_posix.cc(62)]mkdir / data / user / 0 / com.my.app.dev.debug / cache / WebView / Crashpad:没有该文件或目录(2) 2019年11月18日16:58:45.237 21492-21658 com.my.app.dev.debug E / AssetHelper:无法打开资产路径:dist/
这是加载 WebView 的代码
private fun initializeWebViewSettings() {
webView!!.setBackgroundColor(Color.TRANSPARENT)
webView!!.settings.javaScriptEnabled = true
webView!!.settings.javaScriptCanOpenWindowsAutomatically = true
webView!!.settings.domStorageEnabled = true
webView!!.settings.allowFileAccess = true
webView!!.settings.allowContentAccess = true
webView!!.settings.allowUniversalAccessFromFileURLs = true
webView!!.settings.setGeolocationEnabled(true)
setWebViewClient()
setWebViewChromeClient()
webView!!.visibility = View.INVISIBLE
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
//ONLY API_LEVEL >= 21 can use WebViewAssetLoader
assetLoader = WebViewAssetLoader.Builder()
.addPathHandler("/assets/", AssetsPathHandler(this))
.addPathHandler("/res/", ResourcesPathHandler(this))
.build()
webView!!.loadUrl(Constants.WEB_URL_SERVED)
}
else{
webView!!.loadUrl(Constants.WEB_URL_LOCAL)
}
}
我进行了研究,发现这是与此问题相关的已知错误,但它已经在更新的Chrome版本中得到解决。我正在使用Android API 28(最新)在Galaxy Note10上进行测试。
有人遇到类似的问题吗?任何线索将不胜感激。
.addPathHandler("/res/", ResourcesPathHandler(this)
。 - zshmawy