Comment vérifier la version des services Google Play?

95

Dans mon application, je dois vérifier la version des services Google Play (qui est installée sur l'appareil de l'utilisateur). C'est possible ? Et si oui, comment puis-je faire ça? J'ai cherché sur Google mais je n'ai rien trouvé!

Arash Khoeini
la source

Réponses:

94

J'ai trouvé une solution simple:

int v = getPackageManager().getPackageInfo(GoogleApiAvailability.GOOGLE_PLAY_SERVICES_PACKAGE, 0 ).versionCode;

Mais versionCodeest obsolète dans l'API 28, vous pouvez donc utiliser PackageInfoCompat:

long v = PackageInfoCompat.getLongVersionCode(getPackageManager().getPackageInfo(GoogleApiAvailability.GOOGLE_PLAY_SERVICES_PACKAGE, 0 ));
yital9
la source
6
Comment connaître le code de version des services de jeu version 10.2
Manmohan Soni
Étant donné que versionCode est obsolète avec l'API28, vous devez utiliser PackageInfoCompat.getLongVersionCode
G00fY
51

Si vous regardez dans le lien fourni par Stan0, vous verrez ceci :

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) afin d'ê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 cet appareil et que la version installée sur cet appareil n'est pas plus ancienne que celle requise par ce client.

Retour

  • code d'état indiquant s'il y a eu une erreur. Peut - être l' un des suivants dans ConnectionResult: SUCCESS, SERVICE_MISSING, SERVICE_VERSION_UPDATE_REQUIRED, SERVICE_DISABLED, SERVICE_INVALID.

Cela garantira que l'appareil utilise la version requise par votre application.Sinon, vous pouvez agir conformément à la documentation

Éditer

GooglePlayServicesUtil.isGooglePlayServicesAvailable()est obsolète et GoogleApiAvailability.isGooglePlayServicesAvailable()doit maintenant être utilisé à la place.

user2346305
la source
2
GoogleApiAvailability est maintenant un singleton, vous devez donc utiliser: GoogleApiAvailability.getInstance (). IsGooglePlayServicesAvailable (activité)
Nativ
@Nativ existe-t-il un moyen de vérifier si la version des services Google Play exécutée sur un appareil Android est supérieure à 10,2 ou non
Manmohan Soni
@ManmohanSoni J'en suis sûr. Je suis actuellement passé au développement iOS, je ne peux donc pas vous aider.
Nativ
15

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, soit écrire votre code directement dans le bloc else comme commenté, soit 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.

Eng. Samer T
la source
6

À partir de mises à jour plus récentes, j'ai fini avec ce code, j'ai créé une méthode pratique pour gérer tout ce qui y est lié.

Tous les détails relatifs à la disponibilité du service et les 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;vous donnera.

Et l'une des réponses les plus utiles que j'ai trouvées au cours de mes recherches est ici.

TapanHP
la source
6
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();
     }
}
Shayan Shafiee
la source
4

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 l'appareil de l'utilisateur.

steliosf
la source
1

J'ai rencontré le même problème ce matin. Et je l'ai fait grâce aux conseils de stan0. Merci stan0.

Une seule modification est nécessaire en fonction de l'exemple de code de 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 manifest.xml comme:

<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" est tirée de la google-play-services_lib que votre projet utilise. En outre, cette valeur réside au même emplacement que manifest.xml dans google-play-services_lib.

J'espère que cela vous aidera.

Simon Gong
la source
1

Si vous recherchez les services Google Play dans le gestionnaire d'applications, la version installée s'affiche.

dryii
la source
Je n'ai pas essayé les autres approches programmatiques répertoriées dans d'autres réponses, mais la recherche dans le gestionnaire d'applications a fonctionné pour moi, merci!
Kent.Green
1

Version mise à jour (2019.07.03) de 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
            }
        }

    }

}
Michalsx
la source
0

utilisez la fonction suivante pour vérifier si les services 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;
}
MohammadReza
la source
0
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 placé dans un try-catch.

Dandan Meng
la source
-4
int registeredVersion = prefs.getInt(PROPERTY_APP_VERSION, Integer.MIN_VALUE);
    int currentVersion = getAppVersion(context);
    if (registeredVersion != currentVersion) {
        Log.i(TAG, "App version changed.");
        return "";
    }
alican akyol
la source
Ce n'est pas une solution.
Stanley Kou