Fare clic sul collegamento WebView per aprire il browser predefinito


112

In questo momento ho un'app che carica una visualizzazione web e tutti i clic vengono mantenuti all'interno dell'app. Quello che vorrei fare è che quando si fa clic su un determinato collegamento, ad esempio http://www.google.com all'interno dell'app, si apre il browser predefinito. Se qualcuno ha qualche idea per favore fatemelo sapere!

Risposte:


193

Ho dovuto fare la stessa cosa oggi e ho trovato una risposta molto utile su StackOverflow che voglio condividere qui nel caso in cui qualcun altro ne abbia bisogno.

Fonte (da 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
questa risposta mi ha aiutato molto! Grazie!
Android-Droid

7
Nota che se l'URL è relativo, (non inizia con "http: //"), si aprirà all'interno dell'app. Per evitare ciò, restituisci sempre true e fai in modo che i collegamenti URL relativi non facciano nulla.
Johan S

3
Dovresti controllare altri protocolli nel prefisso come rtsp, https e così via. Se i collegamenti sono destinati ad aprire un media, dovrebbe essere reindirizzato al lettore multimediale del dispositivo. Se non è presente alcun prefisso di protocollo, identificare e fornire uno.
Abhinav Saxena

Esatto, quello che sto cercando. Grazie
Sudarshan

2
Nota che shouldOverrideUrlLoading(WebView view, String url)è deprecato nell'API 24. Controlla questa risposta .
Mateus Gondim

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

non è necessario includere questo codice

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

invece è necessario utilizzare il codice d di seguito

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

puoi usare Intent per questo:

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

11
dovresti usare Intent.ACTION_VIEW
rajh2504

10

Hai solo bisogno di aggiungere la seguente riga

yourWebViewName.setWebViewClient(new WebViewClient());

Controlla questo per la documentazione ufficiale.


6

Puoi usare un Intent per questo:

Uri uriUrl = Uri.parse("http://www.google.com/"); 
Intent launchBrowser = new Intent(Intent.ACTION_VIEW, uriUrl);  
startActivity(launchBrowser);  
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.