Link do WebView kliknij otwórz domyślną przeglądarkę

112

W tej chwili mam aplikację, która ładuje widok internetowy i wszystkie kliknięcia są zachowywane w aplikacji. Chciałbym to zrobić, gdy w aplikacji zostanie kliknięty określony link, na przykład http://www.google.com , otworzy się domyślna przeglądarka. Jeśli ktoś ma jakieś pomysły, daj mi znać!

Kyle
źródło

Odpowiedzi:

193

Musiałem dzisiaj zrobić to samo i znalazłem bardzo przydatną odpowiedź na StackOverflow, którą chcę się tutaj podzielić, gdyby ktoś inny jej potrzebował.

Źródło (od 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
źródło
3
ta odpowiedź bardzo mi pomogła! Dzięki!
Android-Droid,
7
Pamiętaj, że jeśli adres URL jest względny (nie zaczyna się od „http: //”), to otworzy się w aplikacji. Aby tego uniknąć, zawsze zwracaj wartość true i spraw, aby linki względne nie robiły nic.
Johan S,
3
Powinieneś sprawdzić inne protokoły w prefiksie, takie jak rtsp, https i tak dalej. Jeśli linki mają otwierać multimedia, należy je przekierować do odtwarzacza multimediów urządzenia. Jeśli nie ma przedrostka protokołu, zidentyfikuj go i podaj.
Abhinav Saxena,
Dokładnie, czego szukam. Dzięki
Sudarshan
2
Zauważ, że shouldOverrideUrlLoading(WebView view, String url)w API 24 jest przestarzałe. Zaznacz tę odpowiedź .
Mateus Gondim
35
WebView webview = (WebView) findViewById(R.id.webview);
webview.loadUrl(https://whatoplay.com/);

nie musisz dołączać tego kodu

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

zamiast tego musisz użyć kodu d poniżej

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
źródło
11

możesz użyć zamiaru do tego:

Intent browserIntent = new Intent("android.intent.action.VIEW", Uri.parse("your Url"));
startActivity(browserIntent);
Piyush
źródło
11
powinieneś użyć Intent.ACTION_VIEW
rajh2504
10

Musisz tylko dodać następujący wiersz

yourWebViewName.setWebViewClient(new WebViewClient());

Sprawdź to, aby uzyskać oficjalną dokumentację.

b1programmer
źródło
6

Możesz użyć intencji do tego:

Uri uriUrl = Uri.parse("http://www.google.com/"); 
Intent launchBrowser = new Intent(Intent.ACTION_VIEW, uriUrl);  
startActivity(launchBrowser);  
BasavRaj
źródło