J'ai vérifié et revérifié mon clé API enregistrée sur la console Google, mais l'erreur suivante persiste:
12-05 16:31:12.940: E/Google Maps Android API(12334): Failed to load map. Could not contact Google servers.
Ce que je vois, ce sont les boutons de zoom avant/arrière et l’arrière-plan du MapView mais pas de carte ??? !!!
Des idées???
Réponse
Je vais l'afficher ici car ce qui a résolu mon problème a été indiqué dans les commentaires de la réponse acceptée ci-dessous.
C'était la permission READ_GSERVICES
. Pour une raison quelconque, la permission n’était pas mentionnée sur le site du développeur lorsqu’il s’agissait de les utiliser.
Pour configurer l'API Google Maps v2 sur Android, assurez-vous que vous avez terminé la procédure all des étapes suivantes.
Clé d'application pour l'accès à l'API
Lorsque Google vous demande l'empreinte SHA1 de votre certificat d'application, vous souhaiterez probablement l'exécuter deux fois, une fois pour votre certificat de débogage et une fois pour votre certificat de publication.
keytool -list -v -keystore publishcert.keystore
keytool -list -v -keystore ~ / .Android/debug.keystore
L'empreinte digitale de l'application sur le marché est différente de celle d'une application que vous venez de tester!
Activer le service sur la console Google API
Connectez-vous à la Console Google API .
Sur la page des services, recherchez Google Maps Android API v2
.
Note - Google Maps API v2
est DIFFÉRENT puis Google Maps Android API v2
Dans l'onglet API Access, cliquez sur Create new Android Key
.
Ajoutez vos signatures de certificat pour accéder aux API.
votre empreinte digitale; com.example.project.package
yourdebug-fingerprint; com.example.project.package
Vous recevrez une clé d'accès à l'API générée.
Vous devrez peut-être d'abord créer un projet API dans la console API.
Modifier le manifeste de l'application
Ajoutez votre clé API à l’intérieur de l’élément <application>
.
<meta-data
Android:name="com.google.Android.maps.v2.API_KEY"
Android:value="yourapikey"/>
Ajoutez les autorisations suivantes:
<permission
Android:name="com.example.project.package.permission.MAPS_RECEIVE"
Android:protectionLevel="signature"/>
<uses-permission Android:name="com.example.project.package.permission.MAPS_RECEIVE"/>
<uses-permission Android:name="Android.permission.INTERNET" />
<uses-permission Android:name="Android.permission.ACCESS_NETWORK_STATE" />
<uses-permission Android:name="Android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission Android:name="com.google.Android.providers.gsf.permission.READ_GSERVICES"/>
Ajoutez la demande de fonctionnalité suivante:
<uses-feature
Android:glEsVersion="0x00020000"
Android:required="true" />
Assurez-vous que tous les points mentionnés ci-dessous sont pris en compte:
1) Un service incorrect a été activé. Assurez-vous que "API Google Maps Android v2" est activé et que "API Google Maps v2" est généré et générez à nouveau la clé API.
2) Ajoutez les éléments suivants à votre manifeste. Remplacez com.example.mapdemo par le package nom de votre application .
3) Utilisation de certificat correct et clé. Certificat de version, qui ne fonctionnera pas pendant le débogage lorsque vous exécutez l'application sur mon téléphone. Vous devez utiliser l'empreinte digitale du certificat de fichier de clés de débogage.
Ce pourrait être un problème avec le manifeste. Les travaux suivants pour moi, en particulier permission.MAPS_RECEIVE
, ont résolu un problème similaire: des boutons de zoom et mon emplacement affiché, mais la carte ne contenait aucune tuile.
<manifest xmlns:Android="http://schemas.Android.com/apk/res/Android"
package="com.discos2.example"
Android:versionCode="1"
Android:versionName="1.0" >
<uses-sdk
Android:minSdkVersion="8"
Android:targetSdkVersion="17" />
<permission
Android:name="com.discos2.example.permission.MAPS_RECEIVE"
Android:protectionLevel="signature" />
<uses-permission Android:name="com.discos2.example.permission.MAPS_RECEIVE" />
<uses-permission Android:name="Android.permission.INTERNET" />
<uses-permission Android:name="Android.permission.ACCESS_WIFI_STATE" />
<uses-permission Android:name="Android.permission.ACCESS_NETWORK_STATE" />
<uses-permission Android:name="Android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission Android:name="Android.permission.ACCESS_FINE_LOCATION" />
<uses-permission Android:name="Android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission Android:name="com.google.Android.providers.gsf.permission.READ_GSERVICES" />
<uses-feature
Android:name="Android.hardware.location"
Android:required="false" />
<uses-feature
Android:name="Android.hardware.location.network"
Android:required="false" />
<uses-feature Android:name="Android.hardware.location.gps" />
<uses-feature
Android:name="Android.hardware.wifi"
Android:required="false" />
<uses-feature
Android:glEsVersion="0x00020000"
Android:required="true" />
<application
Android:hardwareAccelerated="true">
<meta-data
Android:name="com.google.Android.maps.v2.API_KEY"
Android:value="__NEW_GOOGLE_MAPS_V2_KEY_GOES_HERE__" />
<activity
Android:name=".ui.activities.MainActivity" >
<intent-filter>
<action Android:name="Android.intent.action.MAIN" />
<category Android:name="Android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
BTW, je suis sous Windows 7. Je me suis fait avoir pendant des jours, jusqu'à ce que je découvre ce qui suit: J'ai plus d'un debug.keystore. On est à:
C:\Android-sdk\.Android\debug.keystore
Et il y en a un autre, à:
C:\Users\David\.Android\debug.keystore
Une fois que j'ai trouvé le "C:\Utilisateurs\David.Android\debug.keystore" j'ai fait:
keytool -list -alias androiddebugkey -keystore C:\Users\David\.Android\debug.keystore -storepass Android -keypass Android -v
J'ai soumis le SHA1 résultant à la console Google et obtenu une clé API qui fonctionne . Obtenir le SHA1 à partir du fichier de clés situé dans "C:\Android-sdk.Android\debug.keystore" ne fonctionne pas.
Vous avez peut-être activé le mauvais service "API Google Maps Android v2" et non "API Google Maps v2".
Je faisais face au même problème. mais pour moi c’était un problème de magasin de clés, je le signais avec le magasin de clés de débogage, de sorte que Google Map api v2 n’était pas en mesure de se connecter à Google map.
J'ai créé une nouvelle clé api en utilisant my-release-keystore.keystore
(vous pouvez la trouver à C:\Users\{YOUR_USER_NAME}\.Android\my-release-key.keystor
e), puis en générant SHA1 à l'aide du logiciel keytool disponible dans le JDK. copiez-le et inscrivez-vous avec google console.
Utilisez la clé api générée dans le fichier manifeste de vos applications. Le signer avec my-release-key.keystore
le poussera sur l'appareil.
Après avoir passé de nombreuses heures, le problème avait finalement été résolu:
si rien de ce qui précède ne vous a aidé à résoudre votre problème, essayez d'utiliser votre clé api dans values / strings.xml.
<meta-data Android:name="com.google.Android.maps.v2.API_KEY" Android:value="@string/map_key"/>
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="map_key">YOUR_KEY</string>
</resources>
J'ai fait tout ce qui était nécessaire pour accomplir cette tâche. Ma clé, mon manifeste, mon code, etc. étaient corrects. Mais à la fin, après avoir perdu beaucoup de temps, le fichier de clés de débogage que j’utilisais était le mauvais. Il s'agissait de l'empreinte SHA1 après tout.
Créez simplement la clé new API avec SHA et surtout, corrigez le nom du paquet (comme com.example.mapdemo). Utilisez la nouvelle clé générée dans votre AndroidManifest.xml
.
Je suppose que nous avons besoin d’une nouvelle clé d’API pour tous les nouveaux projets Eclipse utilisant Google Maps (la création de la nouvelle clé requiert également le nom du package, qui est essentiellement différent pour tous les projets).
J'ai eu le même problème. J'ai tout simplement manqué ce point: Lorsque vous répertoriez vos services Google API, trois API Google Maps sont disponibles.
API Google Maps Android v2
Google Maps API v2
Google Maps API v3 ...
Vérifiez que la version Android (API Google Maps Android v2) est activée lorsque vous codez pour Android . L’API Google Maps v2 n’est pas suffisant.