Android WebView有时会显示浏览器选择屏幕

问题描述:

关于我的活动的创建,我正在触发一个加载处理程序(同时显示一个微调控件),其中包括处理程序代码,我在三个私有WebView对象上调用loadURL。Android WebView有时会显示浏览器选择屏幕

这样做的目的是预先缓存这些网页,然后根据按钮触摸事件显示它们。实际的加载和显示工作正常,除了有时(看不到图案)我(或我的测试人员)没有理由得到浏览器选择屏幕(如Chrome/Firefox)。

所以我的第一个问题是会导致什么,以及如何防止它发生?

否则怎么回事,你会执行以下操作:三个网页(简单的HTML,没有图像表格等)

  1. 预缓存的结果。
  2. 取决于一个按钮触摸屏幕上的布局显示网页的结果(每次相同的布局,所以当按下按钮2时,它的相应的网页将替换前一个)。

不想回答我自己的问题,但作为唯一的答案是不相关的问题。

看来问题是由重定向引起的,加载的网页实际上没有重定向它,但服务器正在执行来自子域的内部重定向。我用下面的代码解决了这个问题。

this.wvBasic.setWebViewClient(new WebViewClient() { 
    private String pendingUrl; 

    @Override 
    public void onPageStarted(WebView view, String url, Bitmap favicon) { 
     if (pendingUrl == null) { 
      pendingUrl = url; 
     } 
    } 

    @Override 
    public void onPageFinished(WebView view, String url) { 
     if (!url.equals(pendingUrl)) { 
      Log.d(TAG, "Detected HTTP redirect " + pendingUrl + "->" + url); 
      pendingUrl = null; 
     } 
    } 
}); 
this.wvBasic.getSettings().setJavaScriptEnabled(false); 

这是一个非常正常的行为。您创建一个intent,并且操作系统正在使用合适的intent-filter来搜索活动以处理该startActivity(intent)。由于有更多的应用程序可以处理您的意图(在您的情况下,更多的浏览器),操作系统为您提供了从这些活动中进行选择的可能性。

现在,我检查了this线程,它似乎是你正在寻找的信息。根据documentation,你可以retrieve a set of activities that should be presented to the user as similar options。如果您能够对这些活动进行过滤,以便您的应用使用内置浏览器(保证可以安装在所有设备上),那么您可以轻松前往。

+0

我实际上并没有用webview来解决这个问题。它们动态添加为现有LinearLayout视图的子视图。只需轻触按钮,相关的WebView将作为子项添加到LinearLayout中(先移除退出的子项)。这是添加WebView的行为,似乎有时会激发选择屏幕。 – melodiouscode 2012-07-30 17:20:28

+0

有时候你的意思是什么? – overbet13 2012-07-30 17:25:03

+0

这是一个难以复制的错误。您可以使用应用程序一次选择三个按钮中的每一个(并查看相关的网页浏览)。但下次它会显示你的浏览器选择。这发生在几个手机上,尽管所有的都在运行ICS> – melodiouscode 2012-07-30 17:28:43