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 или нет
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