1509 votes

Comment puis-je ouvrir une URL dans le navigateur web d'Android à partir de mon application ?

Comment ouvrir une URL à partir du code dans le navigateur web intégré plutôt que dans mon application ?

J'ai essayé ça :

try {
    Intent myIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(download_link));
    startActivity(myIntent);
} catch (ActivityNotFoundException e) {
    Toast.makeText(this, "No application can handle this request."
        + " Please install a webbrowser",  Toast.LENGTH_LONG).show();
    e.printStackTrace();
}

mais j'ai obtenu une exception :

No activity found to handle Intent{action=android.intent.action.VIEW data =www.google.com

7 votes

Je pense que c'est à cause de ça : Android-developers.blogspot.com/2009/12/

1 votes

Pourquoi cela ne fonctionne pas sur certains appareils ? Même s'il y a un navigateur web, il y a une ActivityNotFoundException.

0 votes

Je rencontre le même problème que @Manu. Installation de base sur un Nexus 6, avec chrome, mais les liens provoquent une exception.

2736voto

mbaird Points 31293

Essayez ça :

Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.google.com"));
startActivity(browserIntent);

Cela fonctionne bien pour moi.

Pour ce qui est du "http://" manquant, je ferais simplement quelque chose comme ça :

if (!url.startsWith("http://") && !url.startsWith("https://"))
   url = "http://" + url;

Je préremplirais probablement votre EditText dans lequel l'utilisateur saisit une URL avec "http://".

2 votes

Sauf que votre code et celui de mbaird ne sont pas les mêmes, d'après ce que je peux voir de ce qui a été posté. Assurez-vous que votre URL a l'extension http:// l'exception affichée suggère que votre URL n'a pas ce schéma.

5 votes

Oui ! Il a manqué le http:// ! L'URL est saisie par l'utilisateur, y a-t-il un moyen de la formater automatiquement ?

0 votes

Il fallait un autre ") " après "( ". google.com" )', mais à part ça, ça a marché. Merci :-)

114voto

Elenasys Points 23268

Un moyen courant d'y parvenir est le code suivant :

String url = "http://www.stackoverflow.com";
Intent i = new Intent(Intent.ACTION_VIEW);
i.setData(Uri.parse(url)); 
startActivity(i); 

qui pourrait être transformé en version courte...

Intent intent = new Intent(Intent.ACTION_VIEW).setData(Uri.parse("http://www.stackoverflow.com"));      
startActivity(intent); 

ou :

Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.stackoverflow.com")); 
startActivity(intent);

le plus court ! :

startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.stackoverflow.com")));

63voto

MikeNereson Points 1325

En 2.3, j'ai eu plus de chance avec

final Intent intent = new Intent(Intent.ACTION_VIEW).setData(Uri.parse(url));
activity.startActivity(intent);

La différence étant l'utilisation de Intent.ACTION_VIEW plutôt que la chaîne "android.intent.action.VIEW"

1 votes

Quelle est la différence ?

1 votes

Cette réponse m'a beaucoup aidé. Je ne sais pas quelle était la différence, mais nous avions un problème avec la 2.3 que cela a résolu. Quelqu'un sait-il quelle est la différence dans l'implémentation ?

2 votes

Selon Android Developer : cette réponse - "Créer une intention avec une action donnée. Tous les autres champs (données, type, classe) sont nuls" et la réponse acceptée - "Créer une intention avec une action donnée et pour une url de données donnée".

31voto

nikki Points 1062

Essayez ça :

Uri uri = Uri.parse("https://www.google.com");
startActivity(new Intent(Intent.ACTION_VIEW, uri));

ou si vous voulez que le navigateur web soit ouvert dans votre activité, faites comme ceci :

WebView webView = (WebView) findViewById(R.id.webView1);
WebSettings settings = webview.getSettings();
settings.setJavaScriptEnabled(true);
webView.loadUrl(URL);

et si vous voulez utiliser le contrôle du zoom dans votre navigateur alors vous pouvez utiliser :

settings.setSupportZoom(true);
settings.setBuiltInZoomControls(true);

4 votes

Notez que les plugins et autres sont désactivés dans WebView, et que les autorisations INTERNET sont nécessaires. ( référence )

23voto

Dmytro Danylyk Points 6911

Si vous voulez montrer à l'utilisateur un dialogue avec la liste de tous les navigateurs, afin qu'il puisse choisir le préféré, voici un exemple de code :

private static final String HTTPS = "https://";
private static final String HTTP = "http://";

public static void openBrowser(final Context context, String url) {

     if (!url.startsWith(HTTP) && !url.startsWith(HTTPS)) {
            url = HTTP + url;
     }

     Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
     context.startActivity(Intent.createChooser(intent, "Choose browser"));// Choose browser is arbitrary :)

}

6 votes

Si plusieurs applications peuvent traiter l'intention, le système fournira automatiquement un sélecteur, n'est-ce pas ?

0 votes

@xmen-w-k parce que url peut commencer l'éther avec http ou https En Java, c'est une bonne pratique de déclarer les "chaînes magiques" comme des constantes.

0 votes

Thx, je ne savais pas pour context.startActivity . Très utile lorsqu'on l'appelle depuis une classe externe

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X