在Android 4.0.x Ice Cream Sandwich中,WebView不会在应用程序启动时呈现本地HTML页面
我知道这个问题已经在这个论坛上以不同的格式被提出,但是没有任何答案被接受,或者我在那里find的答案都没有帮助我。
我正在使用原生android,HTML和Adboe的Flex SDK(没有任何像PhoneGap等框架,使用Android自己的WebView的简单代码)的混合应用程序。
这是我面临的问题:
当应用程序启动时,首先触发flex sdk的活动“AppEntry” ,这是一个空白的活动,它只是为flex SDK设置上下文和初始设置。 接下来,启动使用WebView加载HTML项目的本机MainActivity 。 在Android 4.0.x(ICS)上 ,甚至认为URL已加载(onPageFinished()被调用成功的URL ) ,webview变成空白(白色)。 这发生在第一次安装和启动应用程序后,停止应用程序(通过从最近的应用程序栏中删除),页面按预期方式加载。 像这样反复重新启动有时会重现问题,但频率不可预知。
有些事情需要考虑:
-
由于flex sdk约束,这些HTML文件不能直接存储在“/ assets”文件夹中,而是存储在资产文件夹中的目录结构。
-
问题只发生在冰淇淋三明治(我猜的已知问题) !
我已经尝试过的东西:
- 硬件加速closures(开/关并不重要,两者都testing)
2。
WebSettings settings = webView.getSettings(); settings.setJavaScriptEnabled(true); settings.setUseWideViewPort(true); settings.setLoadWithOverviewMode(true); settings.setSupportMultipleWindows(true); settings.setJavaScriptCanOpenWindowsAutomatically(true); settings.setLoadsImagesAutomatically(true); settings.setDomStorageEnabled(true); settings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.NARROW_COLUMNS); settings.setSaveFormData(true); settings.setAllowFileAccess(true); if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB){ settings.setAllowContentAccess(true); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { settings.setAllowFileAccessFromFileURLs(true); settings.setAllowUniversalAccessFromFileURLs(true); } } settings.setAppCacheEnabled(true); settings.setJavaScriptCanOpenWindowsAutomatically(true); settings.setLoadsImagesAutomatically(true); boolean enableZoom = true; settings.setBuiltInZoomControls(enableZoom); settings.setSupportZoom(enableZoom); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ECLAIR_MR1) { initializePluginAPI(webView); } settings.setDatabaseEnabled(true);
这个问题正在杀死我的应用在Play商店的评论评论。 任何帮助或见解,将不胜感激。
即使认为URL已加载(web页面已成功调用onPageFinished()),webview变成空白(白色)。
我解决了它通过使用mWebView.post()
如果它只有4.0以上,我会build议你添加一个权限给你的应用程序,因为Android需要这个来加载资产文件,否则行为是间歇性的。
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
在Android 3.x – 4.0.x中,当包含查询参数(?)或锚点(#)的url时,WebView在加载本地HTML时存在非常严重的错误。 这个问题直到Android 4.1才能解决。 您应该应用自定义的WebView和WebViewClient。 这里是固定的WebView和WebViewClient。
您应该使用WebViewEx
和WebViewClientEx
而不是WebView
和WebViewClient
,并像下面一样覆盖WebViewClientEx
。 这是Android项目成员的解决方法。
webViewEx.setWebViewClient(new WebViewClientEx(getContext()) { @Override public boolean shouldOverrideUrlLoadingEx(WebView view, String url) { boolean redirected = super.shouldOverrideUrlLoadingEx(view, url); if (!redirected) { if (url != null && URLUtil.isHttpUrl(url) || URLUtil.isHttpsUrl(url)) { view.getContext().startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url))); redirected = true; } } return redirected; } @Override public WebResourceResponse shouldInterceptRequestEx(WebView view, String url) { InputStream stream = inputStreamForAndroidResource(url); if (stream != null) { return new WebResourceResponse(null, null, stream); } return super.shouldInterceptRequestEx(view, url); } private InputStream inputStreamForAndroidResource(String url) { final String ANDROID_ASSET = "file:///android_asset/"; if (url.startsWith(ANDROID_ASSET)) { url = url.replaceFirst(ANDROID_ASSET, ""); try { AssetManager assets = getContext().getAssets(); Uri uri = Uri.parse(url); return assets.open(uri.getPath(), AssetManager.ACCESS_STREAMING); } catch (IOException e) { } } return null; } });
- Android:切断了最后一行的textview
- 如何lockingandroid应用程序的方向肖像模式?
- 在android中使用外部字体
- 在我的项目中使用android.support.v7.widget.CardView(Eclipse)
- 如何testing片段视图对用户是否可见?
- Android内核使用Android模拟器进行编译和testing
- javax.net.ssl.SSLHandshakeException:javax.net.ssl.SSLProtocolException:SSL握手中止:SSL库中的失败,通常是协议错误
- 与不同的行布局cursoradapter
- Outlook – 阅读另一个用户的日历