如何强制webview应用程序在其中打开链接而不是在默认的android浏览器中打开它们,具体取决于域?

时间:2013-01-31 19:13:20

标签: android webview

我刚刚开始开发Android应用程序,所以我需要一些易于理解的webview应用程序的帮助。所以,这是我的具体问题:

如何强制webview应用在其中打开链接,而不是根据域在默认浏览器中打开它们?

请在回答中附上此代码的已编辑/扩展版本:

public class WebViewActivity extends Activity {

private WebView webView;

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.webview);

    webView = (WebView) findViewById(R.id.webView1);
    webView.getSettings().setJavaScriptEnabled(true);
    webView.loadUrl("www.example.com");

我想在webview中打开其内容的域名是:www.qwerty.com默认浏览器应该打开所有其他链接。

非常感谢提前。

2 个答案:

答案 0 :(得分:4)

您必须创建WebViewClient

public class MyWebViewClient extends WebViewClient {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        view.loadUrl(url);
        return true;
    }
}

然后将其设置为WebView,如下所示:

webview.setWebViewClient(new MyWebViewClient());

答案 1 :(得分:2)

您必须评估自定义WebViewClient中传递的网址。 boolean shouldOverrideUrlLoading具有true和false值。 当 true 时,您将网址发送到浏览器,当 false 时,您会留在WebView

public class MyWebViewClient extends WebViewClient {
@Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
    if (Uri.parse(url).getHost().equals("www.qwerty.com")) {
        /* 
         This is my web site, so do not override; 
         let my WebView load the page
        */
        return false;
    }
       /* 
         Otherwise, the link is not for a page on my site, 
         so launch another Activity that handles URLs
       */
        Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
        startActivity(intent);
        return true;    
    }
}

然后,从您的活动中,您确实呼叫新的WebClient

webview.setWebViewClient(new MyWebViewClient());