2012-07-30 72 views
1

關於我的活動的創建,我正在觸發一個加載處理程序(同時顯示一個微調控件),其中包括處理程序代碼,我在三個私有WebView對象上調用loadURL。Android WebView有時會顯示瀏覽器選擇屏幕

這樣做的目的是預先緩存這些網頁,然後根據按鈕觸摸事件顯示它們。實際的加載和顯示工作正常,除了有時(看不到圖案)我(或我的測試人員)沒有理由得到瀏覽器選擇屏幕(如Chrome/Firefox)。

所以我的第一個問題是會導致什麼,以及如何防止它發生?

否則怎麼回事,你會執行以下操作:三個網頁(簡單的HTML,沒有圖像表格等)

  1. 預緩存的結果。
  2. 取決於一個按鈕觸摸屏幕上的佈局顯示網頁的結果(每次相同的佈局,所以當按下按鈕2時,它的相應的網頁將替換前一個)。

回答

1

不想回答我自己的問題,但作爲唯一的答案是不相關的問題。

看來問題是由重定向引起的,加載的網頁實際上沒有重定向它,但服務器正在執行來自子域的內部重定向。我用下面的代碼解決了這個問題。

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); 
0

這是一個非常正常的行爲。您創建一個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