Як перевірити версію сервісів Google Play?


95

У моїй програмі мені потрібно перевірити версію служб Google Play (яка встановлена ​​на пристрої користувача). Це можливо ? І якщо так, то як я можу це зробити? Я шукав у Google, але не міг нічого знайти!

Відповіді:


94

Я знайшов просте рішення:

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

Але versionCodeце застаріло в API 28, тому ви можете використовувати PackageInfoCompat:

long v = PackageInfoCompat.getLongVersionCode(getPackageManager().getPackageInfo(GoogleApiAvailability.GOOGLE_PLAY_SERVICES_PACKAGE, 0 ));

6
Як дізнатися код версії сервісів гри версії 10.2
Манмохан Соні

Оскільки versionCode застарілий за допомогою API28, вам слід використовувати PackageInfoCompat.getLongVersionCode
G00fY

51

Якщо ви заглянете в посилання, надане Stan0, ви побачите це :

public static final int GOOGLE_PLAY_SERVICES_VERSION_CODE

Мінімальна версія пакета послуг Google Play (заявлена ​​в AndroidManifest.xml android: versionCode) для сумісності з цією версією клієнта. Постійне значення: 3225000 (0x003135a8)

Отже, коли ви встановлюєте це у своєму маніфесті, а потім викликаєте isGooglePlayServicesAvailable(context):

public static int isGooglePlayServicesAvailable (Context context)

Перевіряє, чи встановлені та ввімкнені служби Google Play на цьому пристрої, і що версія, встановлена ​​на цьому пристрої, не старша за ту, яку вимагає цей клієнт.

Повертається

  • код стану, який вказує, чи сталася помилка. Може бути один з наступних в ConnectionResult: SUCCESS, SERVICE_MISSING, SERVICE_VERSION_UPDATE_REQUIRED, SERVICE_DISABLED, SERVICE_INVALID.

Це гарантує, що пристрій використовує версію, яку вимагає ваш додаток. Якщо ні, тоді ви можете вжити заходів відповідно до документації

Редагувати

GooglePlayServicesUtil.isGooglePlayServicesAvailable()застаріло і тепер його GoogleApiAvailability.isGooglePlayServicesAvailable()слід використовувати замість цього.


2
GoogleApiAvailability тепер є єдиним елементом, тому вам слід використовувати: GoogleApiAvailability.getInstance (). IsGooglePlayServicesAvailable (діяльність)
Nativ

@Nativ чи є спосіб перевірити, чи перевищує версія сервісів google play на пристрої Android більше 10,2 чи ні
Манмохан Соні

@ManmohanSoni Я впевнений, що є. В даний час я перейшов до розробки iOS, тому я не можу вам сильно допомогти.
Nativ

15

ось моє рішення:

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;
        }
    }

і у вас є два варіанти: або написати свій код безпосередньо в блоці else, як коментується, або використати повернене логічне значення для цього методу, щоб написати власний код.

Сподіваюся, цей код комусь допомагає.


6

З нових оновлень у мене з’явився цей код, я створив зручний метод управління всіма пов’язаними з ним матеріалами ..

Всі деталі, пов’язані з доступністю Послуги, та відповідні деталі доступні тут .

 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;
        }
    }

Я використовую це так,

GoogleApiAvailability avail;
 int PLAY_SERVICE_STATUS = avail.isGooglePlayServicesAvailable(this);
 checkPlayService(PLAY_SERVICE_STATUS);

І за версію GoogleApiAvailability.GOOGLE_PLAY_SERVICES_VERSION_CODE;вам дадуть.

І одна з найкорисніших відповідей, яку я знайшов під час мого дослідження - тут.


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();
     }
}

4

ВАЖЛИВО : GoogleApiAvailability.GOOGLE_PLAY_SERVICES_VERSION_CODE повертає мінімальну версію, необхідну ВАШОЙ програмі, а не версію служб відтворення, встановлену на пристрої користувача.


1

Сьогодні вранці я зіткнувся з тією ж проблемою. І це вдалося зробити за порадою від stan0. Дякую stan0.

Потрібна лише одна зміна на основі зразка коду з 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).
        }
    }
}

Крім того, вам потрібно додати атрибут до вашого manifest.xml як:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="your.package.name"
android:versionCode="3225130"
android:versionName="your.version" >

А значення "3225130" береться з google-play-services_lib, який використовує ваш проект. Крім того, це значення знаходиться в тому ж місці manifest.xml у google-play-services_lib.

Сподіваюся, це допоможе.


1

Якщо ви подивитеся на Служби Google Play у диспетчері програм, він покаже встановлену версію.


Я не пробував інших програмних підходів, перелічених в інших відповідях, але пошук у менеджері додатків працював у мене, дякую!
Кент. Зелений,

1

Оновлена ​​(2019.07.03) версія 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
            }
        }

    }

}

0

використовуйте наступну функцію, щоб перевірити, чи можна використовувати сервіси Google Play чи ні

 private boolean checkGooglePlayServicesAvailable() {
    final int connectionStatusCode = GooglePlayServicesUtil.isGooglePlayServicesAvailable(this);
    if (GooglePlayServicesUtil.isUserRecoverableError(connectionStatusCode)) {
        showGooglePlayServicesAvailabilityErrorDialog(connectionStatusCode);
        return false;
    }
    return true;
}

0
int apkVersion = GoogleApiAvailability.getInstance().getApkVersion(getContext());

отримає той самий результат, що і:

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

Але другий потрібно помістити всередину спробного лову.


-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 "";
    }

Це не рішення.
Стенлі Коу
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.