Google Map peut être
utilisé librement sur un site ou une application gratuite. Par contre la
version libre est limitée en nombre de requête par jour, en résolution ... Vous
trouverez toutes les informations sur https://developers.google.com/maps/licensing.
Dans une application Android vous pouvez soit faire appel directement
à l’application Gmap (présente la plupart du temps sur votre device) soit
directement intégrer une map dans votre application. Nous allons plutôt nous
attarder sur le second cas.
MapView est la
classe centrale de la librairy Maps.
Elle permet d’afficher une carte avec les données récupérées
à partir des web services Google Maps. Ce composant peut capturer les actions
utilisateurs (frappes de touche, le tacile) pour lancer un zoom ou des
traitements pour affiner leur recherche
Paramétrage de votre
projet
Ajouter les librairies Google API à votre projet lors de la
création via le wizard
Ou dans les propriétés d’un projet existant
Vous allez aussi
devoir ajouter des informations dans de description de votre projet, le
fichier AndroidManifest.xml, pour
indiquer que vous utilisez une API Google qui va se connecter à internet. Votre
application ne sera par exemple pas installée sur les devices n’ayant pas la
librairie installée
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
package="com.ehret.scoresheet"
android:versionCode="3"
android:versionName="1.2"
android:installLocation="preferExternal">
<uses-permission android:name="android.permission.INTERNET"/>
<application android:label="@string/app_name">
<uses-library android:name="com.google.android.maps" />
……
</application>
</manifest>
Récupérer une clé pour utiliser l’API Maps
Comme je l’ai dit en préambule de cet article l’utilisation de l’API peut être payante si vous faites beaucoup de requêtes aux serveurs Google. Vous devez donc dans un premier temps vous enregistrer auprès du service Google Map et accepter les conditions d’utilisation (que ce soit dans un contexte de développement ou de production)
Chaque clé Google Map API est associée avec un et un seul certificat (la clé se base sur l’empreinte MD5 du certificat). Chaque MapView doit faire référence à cette clé.
En développement vous pouvez utiliser le certificat de debug utilisé par le sdk pour tester votre application sur un device, mais lors de la publication sur Google Play vous devrez utiliser le certificat de l’application (voir http://javamind-fr.blogspot.fr/2012/08/publication-dune-application-sur-google.html)
Pour déterminer l’empreinte MD5 de votre certificat, vous avez besoin de savoir où se trouve le keystore (fichier contenant les certificats). Si je prends l’exemple du certificat de debug vous pouvez connaître l’emplacement en allant dans Eclipse dans le menu Windows > Preferences > Android > Build. Généralement il se trouve dans le répertoire .android situé dans le répertoire d’installation du SDK Android
La commande ci-dessous permet de calculer l’empreinte MD5 du fichier debug.keystore pour la clé ayant l’alias androiddebugkey.
keytool -list -alias androiddebugkey -keystore debug.keystore
Attention n’utilisez pas la commande keytool fournie dans le JDK7 car le code MD5 obtenu ne sera pas reconnu par Google. Celui du JDK6 ne pose pas de problème
Vous devez ensuite saisir le mot de passe qui est dans notre cas android (voir http://developer.android.com/tools/publishing/app-signing.html#debugmode )
Exemple de MD5 : 94:1E:43:49:87:73:BB:E6:A6:88:D7:20:F1:8E:B5:98
Il ne vous reste plus qu’à aller sur https://developers.google.com/maps/documentation/android/v1/maps-api-signup, accepter les termes du contrat et rentrer le code MD5 généré, pour que Google vous fournisse la clé associée
Il ne vous reste plus qu’à aller sur https://developers.google.com/maps/documentation/android/v1/maps-api-signup, accepter les termes du contrat et rentrer le code MD5 généré, pour que Google vous fournisse la clé associée
Créer une MapView
La première étape consite à créer un fichier layout (Par
exemple /res/layout/gmap.xml) dans lequel vous allez déclarer votre MapView et
la clé asociée
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<com.google.android.maps.MapView
android:id="@+id/mapView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:apiKey="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
android:clickable="true"
android:enabled="true"
/>
</RelativeLayout>
public class ScoreSheetMapActivity extends MapActivity {
private MapView mapView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.gmap);
mapView = (MapView) this.findViewById(R.id.mapView);
mapView.displayZoomControls(true);
}
/**
* Indique si l'application gère des itinéraires
*/
@Override
protected boolean isRouteDisplayed() {
return false;
}
}
Vous
devrez également déclarer cette activité au niveau de votre fichier
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.ehret.scoresheet"
android:versionCode="3"
android:versionName="1.2"
android:installLocation="preferExternal">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-sdk android:minSdkVersion="8" android:targetSdkVersion="16"/>
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/Theme.FeuilleDeMatch">
<uses-library android:name="com.google.android.maps" />
<activity
android:name=".ScoreSheetMapActivity"
android:label="@string/app_name"
android:screenOrientation="portrait">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
Et le résultat sera
le suivant




Bonjour,
RépondreSupprimerJ'aimerais savoir s'il est possible d'intégrer une MapView sur Android 2.2 par exemple, j'ai essayé ajouter le fichier maps.jar dans mon projet mais j'ai des erreurs:
Installation error: INSTALL_FAILED_MISSING_SHARED_LIBRARY
PackageManager: Package fr.oenotourisme requires unavailable shared library com.google.android.maps; failing!
Cordialement
Bonjour
RépondreSupprimerOui il est possible d'utiliser une MapView que Android 2.2. L'exemple lié à cet article fonctionne sur un HTC Desire sous Android 2.2. Cette erreur INSTALL_FAILED_MISSING_SHARED_LIBRARY est liée au fait qu'il ne trouve pas la librairie spécifiée dans le fichier AndroidManifest. Il faudrait vérifier si l'étape d'association du projet à la Google API est faite (voir le paragraphe "Paramétrage de votre projet"). Dans le SDK Manager il faut vérifier que le SDK et les Google API sont installées.