149 votes

Comment ouvrir l’application Google Map standard de mon application ?

Une fois que l’utilisateur clique sur le bouton dans ma demande, je tiens à ouvrir l’application Google Map standard et de montrer son emplacement particulier. Comment puis-je faire ? (sans utiliser de `` )

255voto

Michael Points 16659

Vous devez créer un `` objet avec un geo-URI :

Si vous souhaitez spécifier une adresse, vous devez utiliser une autre forme de geo-URI : `` .

113voto

David Thompson Points 887

Vous pouvez aussi simplement utiliser des http://maps.google.com/maps comme votre URI

String uri = String.format(Locale.ENGLISH, "http://maps.google.com/maps?saddr=%f,%f&daddr=%f,%f", sourceLatitude, sourceLongitude, destinationLatitude, destinationLongitude);
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(uri));
startActivity(intent);

ou vous pouvez assurez-vous que l'application Google Maps seulement est utilisé, cela empêche le filtre d'intention (boîte de dialogue) d'apparaître, en utilisant

intent.setClassName("com.google.android.apps.maps", "com.google.android.maps.MapsActivity"); 

comme suit:

String uri = String.format(Locale.ENGLISH, "http://maps.google.com/maps?saddr=%f,%f&daddr=%f,%f", sourceLatitude, sourceLongitude, destinationLatitude, destinationLongitude);
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(uri));
intent.setClassName("com.google.android.apps.maps", "com.google.android.maps.MapsActivity");
startActivity(intent);

ou vous pouvez ajouter des étiquettes sur les lieux par l'ajout d'une chaîne à l'intérieur de parenthèses après chaque série de coordonnées comme suit:

String uri = String.format(Locale.ENGLISH, "http://maps.google.com/maps?saddr=%f,%f(%s)&daddr=%f,%f (%s)", sourceLatitude, sourceLongitude, "Home Sweet Home", destinationLatitude, destinationLongitude, "Where the party is at");
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(uri));
intent.setClassName("com.google.android.apps.maps", "com.google.android.maps.MapsActivity");
startActivity(intent);

Pour utiliser les utilisateurs de l'emplacement actuel comme point de départ (malheureusement, je n'ai pas trouvé un moyen de l'étiquette à l'emplacement actuel) puis il suffit de déposer l' saddr le paramètre comme suit:

String uri = String.format(Locale.ENGLISH, "http://maps.google.com/maps?daddr=%f,%f (%s)", destinationLatitude, destinationLongitude, "Where the party is at");
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(uri));
intent.setClassName("com.google.android.apps.maps", "com.google.android.maps.MapsActivity");
startActivity(intent);

Pour être complet, si l'utilisateur ne dispose pas de l'application maps installé, alors ça va être une bonne idée d'attraper le ActivityNotFoundException, comme @TonyQ unis, alors nous pouvons commencer la reprise de l'activité sans l'application cartes de restriction, nous pouvons être à peu près sûr que nous n'arriverons jamais à le Toast à la fin, depuis un navigateur internet, la demande est valable pour le lancement de ce schéma d'url.

        String uri = String.format(Locale.ENGLISH, "http://maps.google.com/maps?&daddr=%f,%f (%s)", 12f, 2f, "Where the party is at");
        Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(uri));
        intent.setClassName("com.google.android.apps.maps", "com.google.android.maps.MapsActivity");
        try
        {
            startActivity(intent);
        }
        catch(ActivityNotFoundException ex)
        {
            try
            {
                Intent unrestrictedIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(uri));
                startActivity(unrestrictedIntent);
            }
            catch(ActivityNotFoundException innerEx)
            {
                Toast.makeText(this, "Please install a maps application", Toast.LENGTH_LONG).show();
            }
        }

43voto

David Wiesner Points 431

À l'aide de la Chaîne de format d'aider, mais vous devez être soin complet avec les paramètres régionaux. En allemagne, le flotteur sera sépare en virgule au lieu d'un point.

À l'aide de String.format("geo:%f,%f",5.1,2.1); sur les paramètres régionaux anglais le résultat sera "geo:5.1,2.1" mais avec des paramètres régionaux de l'allemand, vous obtiendrez "geo:5,1,2,1"

Vous devez utiliser les paramètres régionaux anglais pour éviter ce problème.

String uri = String.format(Locale.ENGLISH, "geo:%f,%f", latitude, longitude);
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(uri));
context.startActivity(intent);

Pour définir une étiquette à la géo point vous pouvez étendre votre geo uri, en utilisant:

!!! mais attention à ce que la géo-uri est encore en développement http://tools.ietf.org/html/draft-mayrhofer-geo-uri-00

String uri = String.format(Locale.ENGLISH, "geo:%f,%f?z=%d&q=%f,%f (%s)", 
                           latitude, longitude, zoom, latitude, longitude, label);
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(uri));
context.startActivity(intent);

9voto

Snicolas Points 19644

Consultez cette page de google :

http://developer.Android.com/guide/Appendix/g-app-Intents.html

Vous pouvez utiliser un URI de la forme geo:latitude, longitude

pour ouvrir la visionneuse de carte google et qu’il pointe vers un emplacement.

Cordialement, Stéphane

6voto

TonyQ Points 499

Parfois s’il n’y a aucune aucune application associée à geo : protocal, vous pourriez utiliser try-catch pour la ActivityNotFoundException pour y faire face.

Il se passe lorsque vous utilisez un émulateur comme androVM qui est pas installé google carte par défaut.

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