使用 android webview 在浏览器中打开外部链接

Posted

技术标签:

【中文标题】使用 android webview 在浏览器中打开外部链接【英文标题】:Open external links in the browser with android webview 【发布时间】:2013-08-02 10:00:33 【问题描述】:

我有这个代码,但不是因为它有效,它一直在 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);
            

            
        

【问题讨论】:

【参考方案1】:

问题是您需要将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;
            
        

【讨论】:

我们可以在 webview 链接上设置长点击监听器吗? 现在我已经做到了。但是应用程序崩溃,因为一些 ActivityNotFoundException。 @superUser 你应该提出你自己的问题。 @TheOnlyAnil 你应该提出你自己的问题。 shouldOverrideUrlLoading 已弃用。【参考方案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;
        
    );

【讨论】:

太棒了,这很有魅力。这非常简单,因为它不涉及覆盖WebView。也许@Jaumesv 可以使它成为新的例外答案,将其清楚地固定在顶部... Request.getUrl() 具有最低 SDK 21 要求。【参考方案3】:
 webView.setWebViewClient(new WebViewClient()   
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) 

                if((String.valueOf(request.getUrl())).contains("paramedya.com.tr")) 
                    view.loadUrl(String.valueOf(request.getUrl()));
                 else 
                    Intent intent = new Intent(Intent.ACTION_VIEW, request.getUrl());
                    view.getContext().startActivity(intent);
                

                return true;
            
        );

【讨论】:

【参考方案4】:

这是一个非常甜蜜和简短的解决方案

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

【讨论】:

以上是关于使用 android webview 在浏览器中打开外部链接的主要内容,如果未能解决你的问题,请参考以下文章

我错过了从Android webview打开谷歌地图的东西

如何在 Android 上使用 Xamarin WebView 下载本机浏览器等文件?

Android - 使用外部浏览器在 WebView 中打开目标 _blank 链接

Android WebView

使用 android webview 在浏览器中打开外部链接

Android-使用WebView显示网页