Je me bats avec ce problème à propos de la semaine maintenant. Je cherchais des sujets similaires à ce sujet mais je ne pouvais toujours pas résoudre mon problème.
Le problème est que, lorsque j'essaie d'exécuter mon programme sur un émulateur d'usure Polar m600 (Android V 7.1.1 et API25), ils m'indiquent le message "Services Google Play obsolètes. Nécessite 11011000, mais 10289574 trouvés" .
J'ai suivi la partie "Obtenir le dernier emplacement connu" sur le site du développeur Android. (Lien vers le site https://developer.Android.com/training/location/retrieve-current.html#play-services )
Voici mon code de Mainactivity que j'utilise
public class MainActivity extends Activity {
private FusedLocationProviderClient mFusedLocationClient;
public Location mLastLocation;
private TextView mTextView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final WatchViewStub stub = (WatchViewStub) findViewById(R.id.watch_view_stub);
stub.setOnLayoutInflatedListener(new WatchViewStub.OnLayoutInflatedListener() {
@Override
public void onLayoutInflated(WatchViewStub stub) {
mTextView = (TextView) stub.findViewById(R.id.text);
}
});
mFusedLocationClient = LocationServices.getFusedLocationProviderClient(this);
if (ActivityCompat.checkSelfPermission(this, Android.Manifest.permission.ACCESS_FINE_LOCATION)
!= PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Android.Manifest.permission.ACCESS_COARSE_LOCATION)
!= PackageManager.PERMISSION_GRANTED) {
return;
}
mFusedLocationClient.getLastLocation()
.addOnSuccessListener(this, new OnSuccessListener<Location>() {
@Override
public void onSuccess(Location location) {
mLastLocation = location;
Log.d("Location is:",""+mLastLocation);
if (location != null) {
}
}
});
}
}
Voici mon manifest.xml`
<uses-feature Android:name="Android.hardware.type.watch" />
<uses-permission Android:name="Android.permission.ACCESS_FINE_LOCATION" />
<uses-permission Android:name="Android.permission.ACCESS_COARSE_LOCATION" />
<application
Android:allowBackup="true"
Android:icon="@mipmap/ic_launcher"
Android:label="@string/app_name"
Android:supportsRtl="true"
Android:theme="@Android:style/Theme.DeviceDefault">
<meta-data Android:name="com.google.Android.gms.version"
Android:value="@integer/google_play_services_version" />
<activity
Android:name=".MainActivity"
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>
Et le dernier mais non le moindre mon build.gradle
Android {
compileSdkVersion 25
buildToolsVersion "25.0.2"
defaultConfig {
applicationId "ims.fhj.at.testnavigators"
minSdkVersion 21
targetSdkVersion 25
versionCode 1
versionName "1.0"
multiDexEnabled true
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-Android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.google.Android.support:wearable:2.0.3'
compile 'com.google.Android.gms:play-services-wearable:11.0.1'
compile 'com.google.Android.gms:play-services:11.0.1'}
Créez un émulateur Nexus 5x avec la version Android O - api 26 - version x86 ou Android Nougat - api 24 - x86
Cliquez ensuite sur les 3 points de l'émulateur pour ouvrir la fenêtre étendue. Cliquez ensuite sur Google Play + update. Et cela mettra à jour Google Play Services vers la dernière mise à jour du 11.0.55 aujourd’hui.
Vous devez rétrograder l'API dans un fichier de dégradé portable.
Le problème est que votre appareil ne dispose pas d'une application à jour des services Google Play.
Pour résoudre ce problème, changez ceci:
compile 'com.google.Android.gms:play-services-wearable:10.0.0'
compile 'com.google.Android.gms:play-services:10.0.0'
Ma solution est vraiment bizarre: J'ai donc cliqué sur Supprimer la mise à jour et la version a été remplacée par 11xxxxxx.
Le problème ici est la disparité des services de Google Play (version) sur le fichier émulateur et fichier gradle.
Il peut être résolu de deux manières:
Supprimez l'incompatibilité en rétrogradant la version des services de Google Play (Version) dans le fichier gradle
vers le Services Google Play (version) de l'émulateur.
Mettez à niveau les Services Google Play sur l'émulateur.
Comme String l'a écrit, les services de jeu ne sont pas mis à jour sur l'appareil ..__ Malheureusement, dans un monde WearOS, les services de jeu sont peut-être à jour, mais ils ne sont tout simplement pas disponibles sur les périphériques portables. Dans ce cas, vous pouvez utiliser les méthodes suivantes pour réagir:
GoogleApiAvailability apiAvailability = GoogleApiAvailability.getInstance();
int result = apiAvailability.isGooglePlayServicesAvailable(this);
if (result != ConnectionResult.SUCCESS) {
...
} else {
apiAvailability.getErrorDialog(this, result, REQUEST_CODE,this).show();
}
Cela fait des années que ce problème se pose avec Wear (voir par exemple Android Wear Google Play Services ).
La meilleure solution semble être de ne pas utiliser la dernière version de Play Services. Une option consiste à trouver une version minimale qui semble couvrir vos périphériques de production ciblés; dans votre cas, cela ressemble à quelque chose dans la gamme 10.2. Sinon, choisissez la version la plus basse qui inclut toutes les fonctionnalités dont vous avez besoin (j'utilise personnellement la version 9.8.0).
Pour référence, voici l'historique des versions de Play Services: https://developers.google.com/Android/guides/releases
Parfois, cette erreur peut se produire lorsque vous transmettez la mauvaise valeur Web-client-id
val gso = GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestIdToken(**web-client-id here**)
.requestEmail()
.build()
Utilisez la valeur indiquée dans la section ID client OAuth indiquée sur le client Web (créé automatiquement par le service Google).