Как проверить версию Google Play services?



в моем приложении мне нужно проверить версию Google Play services (которая установлена на устройстве пользователя). Возможно ли это ? И если да, то как я могу это сделать? Я искал Google, но я ничего не мог найти!

590   10  

10 ответов:

Я нашел простое решение:

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

если вы посмотрите в ссылке, предоставленной 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.

это гарантирует, что устройство использует версию вашего приложения требуют, если нет, то вы можете принять меры в соответствии с документацией

Edit

GooglePlayServicesUtil.isGooglePlayServicesAvailable() устарел и теперь GoogleApiAvailability.isGooglePlayServicesAvailable() должен использоваться вместо этого.

вот мое решение:

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, как прокомментировано, либо использовать возвращенное логическое значение для этого метода для написания пользовательского кода.

Я надеюсь, что этот код кому-то поможет.

из новых обновлений я закончил с этим кодом, я сделал удобный метод для управления всеми вещами, связанными с ним..

все детали, связанные с доступностью услуг и связанных с ними деталей доступны здесь.

 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; даст вам.

и один из самых полезных ответов я нашел во время моего исследования здесь.

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

важно: GoogleApiAvailability.GOOGLE_PLAY_SERVICES_VERSION_CODE возвращает минимальную версию, необходимую для вашего приложения, а не версию play services, установленную на устройстве пользователя.

я столкнулся с той же проблемой сегодня утром. И сделал это по совету 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).
        }
    }
}

кроме того, вам нужно добавить атрибут в манифест.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, который использует ваш проект. Кроме того, это значение проживание в том же месте манифеста.xml в google-play-services_lib.

надеюсь, что это поможет.

Если вы посмотрите сервисы Google Play в диспетчере приложений, он покажет установленную версию.

используйте следующую функцию, чтобы проверить, можно ли использовать сервисы google play или нет

 private boolean checkGooglePlayServicesAvailable() {
    final int connectionStatusCode = GooglePlayServicesUtil.isGooglePlayServicesAvailable(this);
    if (GooglePlayServicesUtil.isUserRecoverableError(connectionStatusCode)) {
        showGooglePlayServicesAvailabilityErrorDialog(connectionStatusCode);
        return false;
    }
    return true;
}
int registeredVersion = prefs.getInt(PROPERTY_APP_VERSION, Integer.MIN_VALUE);
    int currentVersion = getAppVersion(context);
    if (registeredVersion != currentVersion) {
        Log.i(TAG, "App version changed.");
        return "";
    }

Comments

    Ничего не найдено.