Clique no link WebView para abrir o navegador padrão

112

Agora eu tenho um aplicativo que carrega um webview e todos os cliques são mantidos dentro do aplicativo. O que eu gostaria de fazer é quando um determinado link, por exemplo, http://www.google.com é clicado dentro do aplicativo, ele abre o navegador padrão. Se alguém tiver alguma ideia, por favor me avise!

Kyle
fonte

Respostas:

193

Tive que fazer a mesma coisa hoje e encontrei uma resposta muito útil no StackOverflow que desejo compartilhar aqui, caso outra pessoa precise.

Fonte (de sven )

webView.setWebViewClient(new WebViewClient(){
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        if (url != null && (url.startsWith("http://") || url.startsWith("https://"))) {
            view.getContext().startActivity(
                new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
            return true;
        } else {
            return false;
        }
    }
});
Amokrane Chentir
fonte
3
essa resposta me ajudou muito! Obrigado!
Android-Droid de
7
Observe que se o url for relativo (não começa com "http: //"), ele será aberto dentro do aplicativo. Para evitar isso, sempre retorne verdadeiro e faça com que os links de url relativos não façam nada.
Johan S
3
Você deve verificar se há outros protocolos no prefixo, como rtsp, https e assim por diante. Se os links forem destinados a abrir uma mídia, ela deve ser redirecionada para o reprodutor de mídia do dispositivo. Se não houver nenhum prefixo de protocolo, identifique e forneça um.
Abhinav Saxena de
Exato, o que estou procurando. Obrigado
Sudarshan
2
Observe que shouldOverrideUrlLoading(WebView view, String url)está obsoleto na API 24. Verifique esta resposta .
Mateus Gondim
35
WebView webview = (WebView) findViewById(R.id.webview);
webview.loadUrl(https://whatoplay.com/);

você não tem que incluir este código

// webview.setWebViewClient(new WebViewClient());

em vez disso, você precisa usar o código d abaixo

webview.setWebViewClient(new WebViewClient()
{
  public boolean shouldOverrideUrlLoading(WebView view, String url)
  {
    String url2="https://whatoplay.com/";
     // all links  with in ur site will be open inside the webview 
     //links that start ur domain example(http://www.example.com/)
    if (url != null && url.startsWith(url2)){
      return false;
    } 
     // all links that points outside the site will be open in a normal android browser
    else
    {
      view.getContext().startActivity(
      new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
      return true;
    }
  }
});
Cristiana chavez
fonte
11

você pode usar o Intent para isso:

Intent browserIntent = new Intent("android.intent.action.VIEW", Uri.parse("your Url"));
startActivity(browserIntent);
Piyush
fonte
11
você deve usar Intent.ACTION_VIEW
rajh2504
10

Você só precisa adicionar a seguinte linha

yourWebViewName.setWebViewClient(new WebViewClient());

Verifique isso para obter a documentação oficial.

b1programmer
fonte
6

Você pode usar um Intent para isso:

Uri uriUrl = Uri.parse("http://www.google.com/"); 
Intent launchBrowser = new Intent(Intent.ACTION_VIEW, uriUrl);  
startActivity(launchBrowser);  
BasavRaj
fonte