Une fois que l'utilisateur appuie sur le bouton de mon application, je souhaite ouvrir l'application Google Map standard et afficher un emplacement particulier. Comment puis-je le faire? (sans utiliser com.google.android.maps.MapView
)
140
lat: 59.915494, lng: 30.409456
il retourne une mauvaise position.String.format("geo:%f,%f", latitude, longitude)
retourné la chaîne par des virgules:geo:59,915494,30,409456
.Vous pouvez également simplement utiliser http://maps.google.com/maps comme URI
ou vous pouvez vous assurer que l'application Google Maps est uniquement utilisée, cela empêche le filtre d'intention (boîte de dialogue) d'apparaître, en utilisant
ainsi:
ou vous pouvez ajouter des étiquettes aux emplacements en ajoutant une chaîne entre parenthèses après chaque ensemble de coordonnées comme ceci:
Pour utiliser l'emplacement actuel des utilisateurs comme point de départ (malheureusement, je n'ai pas trouvé de moyen d'étiqueter l'emplacement actuel), déposez simplement le
saddr
paramètre comme suit:Par souci d'exhaustivité, si l'utilisateur n'a pas installé l'application de cartes, ce sera une bonne idée d'attraper l'exception ActivityNotFoundException, comme l'indique @TonyQ, nous pouvons alors redémarrer l'activité sans la restriction de l'application de cartes, nous pouvons être à peu près sûrs que nous n'atteindrons jamais Toast à la fin car un navigateur Internet est une application valide pour lancer également ce schéma d'URL.
ÉDITER:
Pour les itinéraires, une intention de navigation est désormais prise en charge avec google.navigation
la source
L'utilisation du format String vous aidera, mais vous devez faire attention aux paramètres régionaux. En Allemagne, le flotteur sera séparé par une virgule à la place d'un point.
En utilisant la
String.format("geo:%f,%f",5.1,2.1);
langue anglaise, le résultat sera"geo:5.1,2.1"
mais avec la langue allemande, vous obtiendrez"geo:5,1,2,1"
Vous devez utiliser les paramètres régionaux anglais pour éviter ce problème.
Pour définir une étiquette sur le point géographique, vous pouvez étendre votre géo-uri en utilisant:
!!! mais attention, le geo-uri est toujours en cours de développement http://tools.ietf.org/html/draft-mayrhofer-geo-uri-00
la source
Consultez cette page de google:
http://developer.android.com/guide/appendix/g-app-intents.html
Vous pouvez utiliser un URI de la forme
pour ouvrir la visionneuse de carte Google et la pointer vers un emplacement.
la source
Parfois, s'il n'y a aucune application associée à geo: protocal, vous pouvez utiliser try-catch pour obtenir ActivityNotFoundException pour le gérer.
Cela se produit lorsque vous utilisez un émulateur comme androVM qui n'est pas installé par défaut sur google map.
la source
Vous pouvez également utiliser l'extrait de code ci-dessous, de cette manière, l'existence de google maps est vérifiée avant le début de l'intention.
Référence: https://developers.google.com/maps/documentation/android-api/intents
la source
Pour accéder à un emplacement AVEC PIN dessus, utilisez:
pour sans broche, utilisez ceci dans uri:
la source
J'ai un exemple d'application dans lequel je prépare l'intention et passe simplement CITY_NAME dans l'intention à l'activité de marqueur de cartes qui calcule finalement la longitude et la latitude par Geocoder à l'aide de CITY_NAME.
Vous trouverez ci-dessous l'extrait de code du démarrage de l'activité des marqueurs de cartes et l'intégralité de MapsMarkerActivity.
Les liens expirent, j'ai donc collé le code complet ci-dessus, mais juste au cas où vous voudriez voir le code complet, il est disponible à: https://github.com/gosaliajigar/CSC519/tree/master/CSC519_HW4_89753
la source
Ceci est écrit en Kotlin, il ouvrira l'application de cartes s'il est trouvé et placera le point et vous permettra de commencer le voyage:
Remplacez
requireActivity()
par votreContext
.la source