【发布时间】:2019-11-18 23:17:35
【问题描述】:
我有一个显示本地资产网站的 Android 应用程序,它只有 1 个带有通用 web 视图的活动:
我使用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:访问信息: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 上执行测试
有人遇到过类似的问题吗?任何线索将不胜感激。
【问题讨论】:
标签: android kotlin webview android-webview