J'ai ce code, mais pas parce qu'il fonctionne, il continue de s'ouvrir dans la vue Web et ce que je veux, c'est que les liens n'appartiennent pas à mon site Web ouvert dans votre navigateur par défaut. Une idée? Merci
private class CustomWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if(url.contains("message2space.es.vu")){
view.loadUrl(url);
return true;
}else{
return super.shouldOverrideUrlLoading(view, url);
}
}
}
Le problème est que vous devez envoyer un Intent au navigateur Web par défaut pour ouvrir le lien. Ce que vous faites, c'est simplement appeler une méthode différente dans votre Webview pour gérer le lien. Chaque fois que vous souhaitez qu'une autre application gère quelque chose, vous devez utiliser Intents. Essayez plutôt ce code.
private class CustomWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if(url.contains("message2space.es.vu")) {
view.loadUrl(url);
} else {
Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
startActivity(i);
}
return true;
}
}
Depuis le niveau API 24 shouldOverrideUrlLoading(WebView view, String url)
est obsolète.
Solution à jour:
webView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
Intent intent = new Intent(Intent.ACTION_VIEW, request.getUrl());
view.getContext().startActivity(intent);
return true;
}
});
Voici une solution très douce et courte
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
context.startActivity(i);
return true;
}