2013-08-01 226 views
19

我有這個代碼,但不是因爲它的工作原理,它始終打開在web視圖中,我想要的是,鏈接不屬於我的網站在您的默認瀏覽器打開。任何想法?謝謝用android webview在瀏覽器中打開外部鏈接

private class CustomWebViewClient extends WebViewClient { 
     @Override 
      public boolean shouldOverrideUrlLoading(WebView view, String url) { 
       if(url.contains("message2space.es.vu")){ 
       view.loadUrl(url); 
       return true; 
      }else{ 
       return super.shouldOverrideUrlLoading(view, url); 
      } 

      } 
     } 

回答

61

問題是你需要發送一個Intent到默認的網頁瀏覽器打開鏈接。你在做什麼只是在你的Webview中調用一個不同的方法來處理鏈接。每當你想要另一個應用程序來處理你需要使用Intents的東西。改爲嘗試此代碼。

private class CustomWebViewClient extends WebViewClient { 
     @Override 
      public boolean shouldOverrideUrlLoading(WebView view, String url) { 
       if(url.contains("message2space.es.vu")) { 
       view.loadUrl(url); 
       } else { 
       Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); 
       startActivity(i); 
       } 
       return true; 
      } 
     } 
+0

我們可以對網頁視圖鏈接長按監聽? – TheOnlyAnil

+0

現在我已經完成了這個。然而,應用程序崩潰,因爲一些ActivityNotFoundException。 – superUser

+0

@superUser你應該打開你自己的問題。 – onit

3

這是非常甜蜜和短期的解決方案

@Override 
public boolean shouldOverrideUrlLoading(WebView view, String url) { 
    Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); 
    context.startActivity(i); 
    return true; 
} 
0

下面我非常簡單的解決方案..

有關的WebView Example.to負荷facebook.com並在瀏覽器中的所有其他網址 - >

- 設置的onCreate

webView.loadUrl("http://m.facebook.com"); 
    webView.setWebViewClient(new MyAppWebViewClient()); 

使內部類..

公共類MyAppWebViewClient延伸WebViewClient {

// handling external links as intents 
@Override 
public boolean shouldOverrideUrlLoading(WebView view, String url) { 

    if(Uri.parse(url).getHost().endsWith("facebook.com")) { 
     return false; 
    } 

    Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); 
    view.getContext().startActivity(intent); 
    return true; 
} 

}

2

由於API級24 shouldOverrideUrlLoading(WebView view, String url)已棄用。

到目前爲止的解決方案:

webView.setWebViewClient(new WebViewClient() { 
     @Override 
     public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) { 
      Intent intent = new Intent(Intent.ACTION_VIEW, request.getUrl()); 
      view.getContext().startActivity(intent); 
      return true; 
     } 
    }); 
相關問題