Lien WebView cliquez sur ouvrir le navigateur par défaut

112

En ce moment, j'ai une application qui charge une vue Web et tous les clics sont conservés dans l'application. Ce que je voudrais faire, c'est lorsqu'un certain lien, par exemple, http://www.google.com est cliqué dans l'application, il ouvre le navigateur par défaut. Si quelqu'un a des idées, faites-le moi savoir!

Kyle
la source

Réponses:

193

J'ai dû faire la même chose aujourd'hui et j'ai trouvé une réponse très utile sur StackOverflow que je souhaite partager ici au cas où quelqu'un d'autre en aurait besoin.

Source (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
la source
3
cette réponse m'a beaucoup aidé! Merci!
Android-Droid le
7
Notez que si l'URL est relative, (ne commence pas par "http: //"), elle s'ouvrira dans l'application. Pour éviter cela, retournez toujours true et faites en sorte que les liens URL relatifs ne fassent rien.
Johan S
3
Vous devriez vérifier les autres protocoles dans le préfixe comme rtsp, https et ainsi de suite. Si les liens sont destinés à ouvrir un média, il doit être redirigé vers le lecteur multimédia de l'appareil. S'il n'y a pas de préfixe de protocole, identifiez-en et fournissez-en un.
Abhinav Saxena
Exact, ce que je recherche. Merci
Sudarshan
2
Notez que shouldOverrideUrlLoading(WebView view, String url)c'est obsolète dans l'API 24. Vérifiez cette réponse .
Mateus Gondim
35
WebView webview = (WebView) findViewById(R.id.webview);
webview.loadUrl(https://whatoplay.com/);

vous n'êtes pas obligé d'inclure ce code

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

au lieu de cela, vous devez utiliser le code ci-dessous

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
la source
11

vous pouvez utiliser Intent pour cela:

Intent browserIntent = new Intent("android.intent.action.VIEW", Uri.parse("your Url"));
startActivity(browserIntent);
Piyush
la source
11
vous devriez utiliser Intent.ACTION_VIEW
rajh2504
10

Il vous suffit d'ajouter la ligne suivante

yourWebViewName.setWebViewClient(new WebViewClient());

Vérifiez ceci pour la documentation officielle.

programmeur b1
la source
6

Vous pouvez utiliser une intention pour cela:

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