WebView-Link Klicken Sie auf Standardbrowser öffnen

112

Im Moment habe ich eine App, die eine Webansicht lädt und alle Klicks in der App behalten. Was ich tun möchte, ist, wenn ein bestimmter Link, z. B. http://www.google.com, in der App angeklickt wird, in der der Standardbrowser geöffnet wird. Wenn jemand Ideen hat, lass es mich wissen!

Kyle
quelle

Antworten:

193

Ich musste heute das Gleiche tun und habe auf StackOverflow eine sehr nützliche Antwort gefunden, die ich hier teilen möchte, falls jemand anderes sie benötigt.

Quelle (von 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
quelle
3
Diese Antwort hat mir sehr geholfen! Vielen Dank!
Android-Droid
7
Beachten Sie, dass die URL, wenn sie relativ ist (nicht mit "http: //" beginnt), in der App geöffnet wird. Um dies zu vermeiden, geben Sie immer true zurück und lassen Sie relative URL-Links nichts tun.
Johan S
3
Sie sollten im Präfix nach anderen Protokollen wie rtsp, https usw. suchen. Wenn die Links ein Medium öffnen sollen, sollte es zum Media Player des Geräts umgeleitet werden. Wenn es kein Protokollpräfix gibt, identifizieren Sie eines und geben Sie eines an.
Abhinav Saxena
Genau das, wonach ich suche. Danke
Sudarshan
2
Beachten Sie, dass dies shouldOverrideUrlLoading(WebView view, String url)in API 24 veraltet ist. Überprüfen Sie diese Antwort .
Mateus Gondim
35
WebView webview = (WebView) findViewById(R.id.webview);
webview.loadUrl(https://whatoplay.com/);

Sie müssen diesen Code nicht einschließen

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

Stattdessen müssen Sie den folgenden Code verwenden

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
quelle
11

Sie können Intent dafür verwenden:

Intent browserIntent = new Intent("android.intent.action.VIEW", Uri.parse("your Url"));
startActivity(browserIntent);
Piyush
quelle
11
Sie sollten Intent.ACTION_VIEW
rajh2504
10

Sie müssen nur die folgende Zeile hinzufügen

yourWebViewName.setWebViewClient(new WebViewClient());

Überprüfen Sie dies für offizielle Dokumentation.

b1Programmierer
quelle
6

Sie können hierfür eine Absicht verwenden:

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