2013-08-01 179 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; 
     } 
    }); 
相关问题