Dans mon application, je dois vérifier la version des services Google Play (installée sur le périphérique de l'utilisateur). C'est possible ? Et si oui, comment puis-je faire cela? J'ai cherché sur Google mais je n'ai rien trouvé!
J'ai trouvé une solution simple:
int v = getPackageManager().getPackageInfo(GoogleApiAvailability.GOOGLE_PLAY_SERVICES_PACKAGE, 0 ).versionCode;
Mais versionCode
est obsolète dans l'API 28, vous pouvez donc utiliser PackageInfoCompat
:
long v = PackageInfoCompat.getLongVersionCode(getPackageManager().getPackageInfo(GoogleApiAvailability.GOOGLE_PLAY_SERVICES_PACKAGE, 0 ));
Si vous regardez dans le lien fourni par Stan0, vous verrez this :
public static final int GOOGLE_PLAY_SERVICES_VERSION_CODE
Version minimale du package de services Google Play (déclarée dans AndroidManifest.xml Android: versionCode) pour être compatible avec cette version du client. Valeur constante: 3225000 (0x003135a8)
Ainsi, lorsque vous définissez cela dans votre manifeste, puis appelez isGooglePlayServicesAvailable(context)
:
public static int isGooglePlayServicesAvailable (Context context)
Vérifie que les services Google Play sont installés et activés sur ce périphérique et que la version installée sur ce périphérique n’est pas plus ancienne que celle requise par ce client.
Retourne
- code d'état indiquant s'il y a eu une erreur. Peut être l’une des suivantes dans ConnectionResult:
SUCCESS
,SERVICE_MISSING
,SERVICE_VERSION_UPDATE_REQUIRED
,SERVICE_DISABLED
,SERVICE_INVALID
.
Il s'assurera que l'appareil utilise la version requise par votre application. Sinon, vous pourrez agir conformément à la documentation.
GooglePlayServicesUtil.isGooglePlayServicesAvailable()
est obsolète et maintenant GoogleApiAvailability.isGooglePlayServicesAvailable()
devrait être utilisé à la place.
voici ma solution:
private boolean checkGooglePlayServices() {
final int status = GooglePlayServicesUtil.isGooglePlayServicesAvailable(this);
if (status != ConnectionResult.SUCCESS) {
Log.e(TAG, GooglePlayServicesUtil.getErrorString(status));
// ask user to update google play services.
Dialog dialog = GooglePlayServicesUtil.getErrorDialog(status, this, 1);
dialog.show();
return false;
} else {
Log.i(TAG, GooglePlayServicesUtil.getErrorString(status));
// google play services is updated.
//your code goes here...
return true;
}
}
et vous avez deux options: écrire votre code directement dans le bloc else comme commenté ou utiliser la valeur booléenne renvoyée pour cette méthode pour écrire du code personnalisé.
J'espère que ce code aide quelqu'un.
int status = GoogleApiAvailability.getInstance().isGooglePlayServicesAvailable(this);
if(status != ConnectionResult.SUCCESS) {
if(status == ConnectionResult.SERVICE_VERSION_UPDATE_REQUIRED){
Toast.makeText(this,"please update your google play service",Toast.LENGTH_SHORT).show();
}
else {
Toast.makeText(this, "please download the google play service", Toast.LENGTH_SHORT).show();
}
}
Depuis les dernières mises à jour, j'ai obtenu ce code, j'ai créé une méthode pratique pour gérer tout ce qui s'y rapporte.
Tous les détails liés à la disponibilité du service et aux détails connexes sont disponibles ici .
private void checkPlayService(int PLAY_SERVICE_STATUS)
{
switch (PLAY_SERVICE_STATUS)
{
case ConnectionResult.API_UNAVAILABLE:
//API is not available
break;
case ConnectionResult.NETWORK_ERROR:
//Network error while connection
break;
case ConnectionResult.RESTRICTED_PROFILE:
//Profile is restricted by google so can not be used for play services
break;
case ConnectionResult.SERVICE_MISSING:
//service is missing
break;
case ConnectionResult.SIGN_IN_REQUIRED:
//service available but user not signed in
break;
case ConnectionResult.SUCCESS:
break;
}
}
Je l'utilise comme ça,
GoogleApiAvailability avail;
int PLAY_SERVICE_STATUS = avail.isGooglePlayServicesAvailable(this);
checkPlayService(PLAY_SERVICE_STATUS);
Et pour la version GoogleApiAvailability.GOOGLE_PLAY_SERVICES_VERSION_CODE;
te donnera.
Et l’une des réponses les plus utiles que j’ai trouvées au cours de mes recherches est ici.
IMPORTANT : GoogleApiAvailability.GOOGLE_PLAY_SERVICES_VERSION_CODE renvoie la version minimale requise par VOTRE application, et non la version des services de lecture installée sur le périphérique de l'utilisateur.
Si vous recherchez des services Google Play dans le gestionnaire d'applications, la version installée s'affiche.
J'ai rencontré le même problème ce matin. Et l’a fait avec les conseils de stan0. Merci stan0.
Une seule modification est nécessaire en fonction de l'exemple de code fourni par https://developers.google.com/maps/documentation/Android/map .
private void setUpMapIfNeeded() {
// Do a null check to confirm that we have not already instantiated the
// map.
if (mMap == null) {
FragmentManager mgr = getFragmentManager();
MapFragment mapFragment = (MapFragment)mgr.findFragmentById(R.id.map);
mMap = mapFragment.getMap();
// Check if we were successful in obtaining the map.
if (mMap != null) {
// The Map is verified. It is now safe to manipulate the map.
setUpMap();
}else{
// check if google play service in the device is not available or out-dated.
GooglePlayServicesUtil.isGooglePlayServicesAvailable(this);
// nothing anymore, cuz Android will take care of the rest (to remind user to update google play service).
}
}
}
En outre, vous devez ajouter un attribut à votre fichier manifest.xml en tant que:
<manifest xmlns:Android="http://schemas.Android.com/apk/res/Android"
package="your.package.name"
Android:versionCode="3225130"
Android:versionName="your.version" >
Et la valeur de "3225130" provient de google-play-services_lib utilisé par votre projet. En outre, cette valeur réside au même emplacement que manifeste.xml dans google-play-services_lib.
J'espère que ça vous sera utile.
Mise à jour (2019.07.03) version Kotlin:
class GooglePlayServicesUtil {
companion object {
private const val GOOGLE_PLAY_SERVICES_AVAILABLE_REQUEST = 9000
fun isGooglePlayServicesWithError(activity: Activity, showDialog: Boolean): Boolean {
val status = GoogleApiAvailability.getInstance().isGooglePlayServicesAvailable(activity)
return if (status != ConnectionResult.SUCCESS) {
if (showDialog) {
GoogleApiAvailability.getInstance().getErrorDialog(activity, status, GOOGLE_PLAY_SERVICES_AVAILABLE_REQUEST).show()
}
true
} else {
false
}
}
}
}
int apkVersion = GoogleApiAvailability.getInstance().getApkVersion(getContext());
obtiendra le même résultat que:
int v = getPackageManager().getPackageInfo(GoogleApiAvailability.GOOGLE_PLAY_SERVICES_PACKAGE, 0 ).versionCode;
Mais le second doit être mis dans un try-catch.
utilisez la fonction suivante pour vérifier si les services de Google Play peuvent être utilisés ou non
private boolean checkGooglePlayServicesAvailable() {
final int connectionStatusCode = GooglePlayServicesUtil.isGooglePlayServicesAvailable(this);
if (GooglePlayServicesUtil.isUserRecoverableError(connectionStatusCode)) {
showGooglePlayServicesAvailabilityErrorDialog(connectionStatusCode);
return false;
}
return true;
}