Enlace WebView haga clic en abrir navegador predeterminado


112

Ahora mismo tengo una aplicación que carga una vista web y todos los clics se mantienen dentro de la aplicación. Lo que me gustaría hacer es cuando se hace clic en un enlace determinado, por ejemplo, http://www.google.com , dentro de la aplicación, se abre el navegador predeterminado. Si alguien tiene alguna idea, ¡hágamelo saber!

Respuestas:


193

Tuve que hacer lo mismo hoy y encontré una respuesta muy útil en StackOverflow que quiero compartir aquí en caso de que alguien más la necesite.

Fuente (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;
        }
    }
});

3
esta respuesta me ayudó mucho! ¡Gracias!
Android-Droid

7
Tenga en cuenta que si la URL es relativa (no comienza con "http: //"), se abrirá dentro de la aplicación. Para evitar esto, siempre devuelva verdadero y haga que los enlaces URL relativos no hagan nada.
Johan S

3
Debe buscar otros protocolos en el prefijo como rtsp, https, etc. Si los enlaces están destinados a abrir un medio, debe redirigirse al reproductor de medios del dispositivo. Si no hay un prefijo de protocolo, identifique y proporcione uno.
Abhinav Saxena

Exacto, lo que estoy buscando. Gracias
Sudarshan

2
Tenga en cuenta que shouldOverrideUrlLoading(WebView view, String url)está en desuso en API 24. Compruebe esta respuesta .
Mateus Gondim

35
WebView webview = (WebView) findViewById(R.id.webview);
webview.loadUrl(https://whatoplay.com/);

no tienes que incluir este código

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

en su lugar, necesitas usar el código d a continuación

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;
    }
  }
});

11

puedes usar Intent para esto:

Intent browserIntent = new Intent("android.intent.action.VIEW", Uri.parse("your Url"));
startActivity(browserIntent);

11
debe usar Intent.ACTION_VIEW
rajh2504

10

Solo necesitas agregar la siguiente línea

yourWebViewName.setWebViewClient(new WebViewClient());

Compruebe esto para obtener documentación oficial.


6

Puedes usar un Intent para esto:

Uri uriUrl = Uri.parse("http://www.google.com/"); 
Intent launchBrowser = new Intent(Intent.ACTION_VIEW, uriUrl);  
startActivity(launchBrowser);  
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.