Je suis un peu perdu en ce moment… .. J'implémente une application Android à l'aide de Google Maps.
Pour que cela fonctionne, j'ai suivi des tutoriels assez efficaces. Cependant je suis coincé avec ceci ":
Pour résoudre ce problème, j'ai trouvé quelques astuces ici ou ici qui indiquent que pour résoudre ce problème, vous devez utiliser une configuration spéciale pour l'émulateur. Voici le mien:
et d'installer du .apk sur l'émulateur.
Et la magie est supposée être terminée et la carte doit apparaître, ce qui n'est pas mon cas.
J'ai vérifié que mes extras étaient bien installés:
Voici mon AndroidManifest:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:Android="http://schemas.Android.com/apk/res/Android"
package="mypack"
Android:versionCode="1"
Android:versionName="1.0">
<uses-sdk Android:minSdkVersion="16"/>
<permission Android:name="mypack.permission.MAPS_RECEIVE"
Android:protectionLevel="signature"/>
<uses-permission Android:name="mypack.permission.MAPS_receive"/>
<!-- Permission pour utiliser la connexion internet -->
<uses-permission Android:name="Android.permission.INTERNET" />
<!-- Permission permettant de vérifier l'état de la connexion -->
<uses-permission Android:name="Android.permission.ACCESS_NETWORK_STATE" />
<!-- Permission pour stocker des données en cache de la map -->
<uses-permission Android:name="Android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission Android:name="com.google.Android.providers.gsf.permission.READ_GSERVICES" />
<uses-permission Android:name="Android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission Android:name="Android.permission.ACCESS_FINE_LOCATION" />
<uses-feature
Android:glEsVersion="0x00020000"
Android:required="true" />
<application Android:label="@string/app_name" Android:icon="@drawable/ic_launcher">
<meta-data
Android:name="com.google.Android.maps.v2.API_KEY"
Android:value="MYKEY" />
<meta-data Android:name="com.google.Android.gms.version"
Android:value="@integer/google_play_services_version" />
<activity Android:name="Home"
Android:label="@string/app_name">
<intent-filter>
<action Android:name="Android.intent.action.MAIN"/>
<category Android:name="Android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
</application>
</manifest>
Voici mon activité principale
import Android.app.Activity;
import Android.os.Bundle;
import com.google.Android.gms.maps.GoogleMap;
import com.google.Android.gms.maps.MapFragment;
public class Home extends Activity {
/**
* Called when the activity is first created.
*/
private GoogleMap map;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
map = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)).getMap();
}
}
et la mise en page correspondante:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:orientation="vertical"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
>
<fragment xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:id="@+id/map"
Android:name="com.google.Android.gms.maps.MapFragment"
Android:layout_width="match_parent"
Android:layout_height="match_parent" />
</LinearLayout>
J'espère trouver une solution ou ce que j'ai manqué ici, merci d'avance.
Dans Android SDK Manager, vous devez installer "Google API (image système x86)" sous "Android 4.4.2 (API 19)". Quittez Eclipse et redémarrez-le.
Créez ensuite un nouveau périphérique virtuel Android dans le gestionnaire AVD et choisissez "API Google x86 (Google Inc.) - API de niveau 19" comme cible. Cochez "Utiliser l'hôte GPU" pour vous assurer que le dessin de la carte sera accéléré.
Ça y est, Play Services sera préinstallé sur ce nouvel émulateur et il fonctionnera plus rapidement car il s'agit d'une image x86.
en utilisant Android Studio, la seule chose qui m'a aidé était de réduire la version de Google Play Services dans le fichier gradle de la dernière version à ceci:
compile 'com.google.Android.gms:play-services:4.2.+'
(bien sûr, ceci est un "contournement" temporaire pour vous permettre de continuer à courir)
J'ai eu un problème pour obtenir cette erreur et appuyer sur le bouton «Mettre à jour» n'a pas fonctionné, il était bloqué sur une boucle. Ce qui a fonctionné est le suivant (dans Android Studio):
Bien que les réponses fournies fonctionnent pour un émulateur, cela pourrait poser un problème réel sur un périphérique réel et ces solutions ne fonctionneront pas sur un périphérique réel. Cela peut se produire sur un ancien appareil doté d'une version obsolète des services Google Play.
Pour résoudre ce problème, la bibliothèque de services Google Play dispose d'un ensemble d'API permettant de vérifier la disponibilité des services Google Play. La classe GoogleApiAvailability
fournit principalement quelques méthodes pour gérer les problèmes de disponibilité, tels qu'une version obsolète.
Maintenant, pour détecter si un appareil dispose des services Google Play ou non, je crée normalement une méthode d'assistance pour exécuter le contrôle.
private boolean checkPlayServices(){
GoogleApiAvailability gaa = GoogleApiAvailability.getInstance();
int result = gaa.isGooglePlayServicesAvailable(getApplicationContext());
if(result != ConnectionResult.SUCCESS){
if(gaa.isUserResolvableError(result)){
gaa.getErrorDialog(this,result, REQUEST_PLAY_SERVICES_RESOLUTION).show();
}
return false;
}
return true;
}
Cette méthode d'assistance vérifie si les services Google Play sont disponibles ou non en inspectant le code d'erreur renvoyé par isGooglePlayServicesAvailable
. Ensuite, il appelle isUserResolvableError
pour déterminer si l'erreur peut être résolue par l'utilisateur (par exemple, en mettant à jour les services Google Play). S'il est possible de le résoudre, une boîte de dialogue s'affiche pour que l'utilisateur puisse confirmer qu'il souhaite que le système résolve l'erreur. Puis appelez-le avec la méthode onCreate
de l'activité, je lance cette vérification comme ci-dessous
//I normally assume Google Play services is available
private boolean playServicesAvailable = true;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_map_selector);
//check for rare case where Google Play Services is not available
playServicesAvailable = checkPlayServices();
if(!playServicesAvailable){
//hide UI elements and turn off features that rely on Google Play Services
}
}
J'espère que ça aide certains là-bas
Pour vous épargner la configuration d'un émulateur ne prenant pas en charge Google Play, utilisez toujours un émulateur avec le playicon.
comme indiqué dans l'image: L'icône play se trouve sous la ligne Playstore.
Après avoir installé l'émulateur compatible avec Google Play, exécutez à nouveau l'application dans l'émulateur. Lorsque vous recevez la notification "L'application ne s'exécutera que si .....", cliquez sur la notification et suivez les instructions à l'écran: "Signature En utilisant un compte Gmail ... e-mail et mot de passe, etc. ", dès que vous acceptez la licence de Google, vous obtenez l'écran de mise à jour de Google Play:
mettez à jour votre jeu Google et relancez votre application . Assurez-vous également que vous avez les dépendances Google dans les graduations de niveau de votre application:
Niveau d'application build.gradle (Module: app)
dependencies {
}
apply plugin: 'com.google.gms.google-services'
Niveau de projet Gradle "build, gradle (Project: AppName)"
dépendances {
classpath 'com.google.gms:google-services:3.2.1'
}
Je n'ai eu ce problème que lorsque j'utilise l'émulateur Android à partir d'Android Studio ..__ J'ai résolu le problème en ajoutant le plugin google-services à gradle: app
apply plugin: 'com.google.gms.google-services'
puis sur les dépendances add
compile 'com.google.Android.gms:play-services:9.0.0'
auparavant j'utilisais
compile 'com.google.Android.gms:play-services:9.4.0'
mais cela indique une erreur de correspondance et suggère d'utiliser com.Android.gms version 9.0.0
J'ai eu la même erreur. Il a été corrigé en mettant à jour Android Studio avec ses outils de SDK Android connexes.
J'ai rencontré cette même erreur en essayant de construire sur Android 7.0. J'ai reconstruit sous 6.0 et n'ai eu aucun problème. Rétablir 1 niveau d'API peut également vous aider.