Google Play hizmetleri sürümü nasıl kontrol edilir?


95

Uygulamamda, Google Play hizmetleri sürümünü (kullanıcının cihazında yüklü olan) kontrol etmem gerekiyor. Mümkün mü ? Ve evet ise, bunu nasıl yapabilirim? Google'da arama yaptım ama hiçbir şey bulamadım!

Yanıtlar:


96

Basit bir çözüm buldum:

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

Ancak versionCodeAPI 28'de kullanımdan kaldırılmıştır, dolayısıyla şunları kullanabilirsiniz PackageInfoCompat:

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

7
Play hizmetleri sürüm 10.2 sürüm kodu nasıl
Manmohan Soni

VersionCode API28 ile kullanımdan kaldırıldığından, PackageInfoCompat.getLongVersionCode
G00fY

52

Eğer Stan0 tarafından verilen bağlantıya bakarsanız göreceksiniz bu :

public static final int GOOGLE_PLAY_SERVICES_VERSION_CODE

Bu istemci sürümüyle uyumlu olması için minimum Google Play hizmetleri paketi sürümü (AndroidManifest.xml android: versionCode'da beyan edilmiştir). Sabit Değer: 3225000 (0x003135a8)

Yani, bunu manifestinize koyduğunuzda ve sonra çağırdığınızda isGooglePlayServicesAvailable(context):

public static int isGooglePlayServicesAvailable (Context context)

Google Play hizmetlerinin bu cihaza yüklendiğini ve etkinleştirildiğini ve bu cihazda yüklü olan sürümün bu istemcinin gerektirdiğinden daha eski olmadığını doğrular.

İadeler

  • bir hata olup olmadığını gösteren durum kodu. ConnectionResult aşağıdakilerden biri olabilir: SUCCESS, SERVICE_MISSING, SERVICE_VERSION_UPDATE_REQUIRED, SERVICE_DISABLED, SERVICE_INVALID.

Cihazın uygulamanızın gerektirdiği sürümü kullanmasını sağlar, değilse, belgelere göre işlem yapabilirsiniz.

Düzenle

GooglePlayServicesUtil.isGooglePlayServicesAvailable()kullanımdan kaldırılmıştır ve GoogleApiAvailability.isGooglePlayServicesAvailable()bunun yerine artık kullanılmalıdır.


2
GoogleApiAvailability artık bir tekildir, bu nedenle kullanmanız gerekir: GoogleApiAvailability.getInstance (). İsGooglePlayServicesAvailable (etkinlik)
Nativ

@Nativ, android cihazda çalışan Google Play hizmetleri sürümünün 10.2'den büyük olup olmadığını kontrol etmenin herhangi bir yolu var mı
Manmohan Soni

@ManmohanSoni Eminim vardır. Şu anda iOS geliştirmeye geçtim, bu yüzden size pek yardımcı olamam.
Nativ

15

İşte benim çözümüm:

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

ve iki seçeneğiniz vardır, ya kodunuzu doğrudan else bloğuna yorumlandığı gibi yazın ya da özel kod yazmak için bu yöntem için döndürülen boole değerini kullanın.

Umarım bu kod birine yardımcı olur.


6

Daha yeni güncellemelerden, bu kodla sonuçlandığımdan, onunla ilgili her şeyi yönetmek için kullanışlı bir yöntem yaptım ..

Hizmetin kullanılabilirliğiyle ilgili tüm ayrıntılar ve ilgili ayrıntılar burada mevcuttur .

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

Ben böyle kullanıyorum

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

Ve sürüm GoogleApiAvailability.GOOGLE_PLAY_SERVICES_VERSION_CODE;için size verecek.

Araştırmam sırasında bulduğum en faydalı cevaplardan biri de burası.


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

5

ÖNEMLİ : GoogleApiAvailability.GOOGLE_PLAY_SERVICES_VERSION_CODE, kullanıcının cihazında yüklü olan oyun hizmetleri sürümünü değil, SİZİN uygulamanızın gerektirdiği minimum sürümü döndürür.


1

Bu sabah aynı problemle karşılaştım. Ve stan0'ın tavsiyesi ile hallettim. Teşekkürler stan0.

Https://developers.google.com/maps/documentation/android/map adresindeki örnek koda göre yalnızca bir değişiklik gereklidir .

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).
        }
    }
}

Ayrıca, manifest.xml dosyanıza şu şekilde bir öznitelik eklemeniz gerekir:

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

Ve "3225130" değeri, projenizin kullandığı google-play-services_lib'den alınır. Ayrıca, bu değer google-play-services_lib'de manifest.xml ile aynı konumda bulunuyor.

Umarım yardımcı olur.


1

Uygulama yöneticisinde Google Play Hizmetlerini ararsanız, yüklü sürümü gösterecektir.


Diğer yanıtlarda listelenen diğer programatik yaklaşımları denemedim, ancak uygulama yöneticisinde arama yapmak işime yaradı, teşekkürler!
Kent.Green

1

Güncellenmiş (2019.07.03) Kotlin sürümü:

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 oyun hizmetlerinin kullanılıp kullanılamayacağını kontrol etmek için aşağıdaki işlevi kullanın

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

şununla aynı sonucu alacak:

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

Ancak ikincisinin bir deneme yakalama içine konması gerekiyor.


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

Bu bir çözüm değil.
Stanley Kou
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.