Bagaimana cara memeriksa versi layanan Google Play?

95

Dalam aplikasi saya, saya perlu memeriksa versi layanan Google Play (yang diinstal di perangkat pengguna). Apa itu mungkin ? Dan jika ya, bagaimana saya bisa melakukannya? Saya mencari di Google tetapi tidak menemukan apa-apa!

Arash Khoeini
sumber

Jawaban:

95

Saya menemukan solusi sederhana:

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

Tapi versionCodesudah tidak digunakan lagi di API 28, jadi Anda bisa menggunakan PackageInfoCompat:

long v = PackageInfoCompat.getLongVersionCode(getPackageManager().getPackageInfo(GoogleApiAvailability.GOOGLE_PLAY_SERVICES_PACKAGE, 0 ));
yital9
sumber
6
Cara mengetahui kode versi layanan bermain versi 10.2
Manmohan Soni
Karena versionCode tidak digunakan lagi dengan API28, Anda harus menggunakan PackageInfoCompat.getLongVersionCode
G00fY
52

Jika Anda melihat di tautan yang disediakan oleh Stan0 Anda akan melihat ini :

public static final int GOOGLE_PLAY_SERVICES_VERSION_CODE

Versi paket layanan Google Play minimum (dideklarasikan di AndroidManifest.xml android: versionCode) agar kompatibel dengan versi klien ini. Nilai Konstanta: 3225000 (0x003135a8)

Jadi, ketika Anda mengaturnya di manifes Anda dan kemudian memanggil isGooglePlayServicesAvailable(context):

public static int isGooglePlayServicesAvailable (Context context)

Memverifikasi bahwa layanan Google Play diinstal dan diaktifkan di perangkat ini, dan bahwa versi yang diinstal di perangkat ini tidak lebih lama dari yang diperlukan oleh klien ini.

Kembali

  • kode status yang menunjukkan apakah ada kesalahan. Dapat menjadi salah satu berikut ConnectionResult: SUCCESS, SERVICE_MISSING, SERVICE_VERSION_UPDATE_REQUIRED, SERVICE_DISABLED, SERVICE_INVALID.

Ini akan memastikan bahwa perangkat menggunakan versi yang dibutuhkan aplikasi Anda, jika tidak, Anda dapat mengambil tindakan sesuai dengan dokumentasi

Edit

GooglePlayServicesUtil.isGooglePlayServicesAvailable()tidak digunakan lagi dan sekarang GoogleApiAvailability.isGooglePlayServicesAvailable()harus digunakan sebagai gantinya.

pengguna2346305
sumber
2
GoogleApiAvailability sekarang menjadi tunggal jadi Anda harus menggunakan: GoogleApiAvailability.getInstance (). IsGooglePlayServicesAvailable (aktivitas)
Nativ
@Nativ adakah cara untuk memeriksa apakah versi layanan google play yang berjalan pada perangkat android lebih besar dari 10.2 atau tidak
Manmohan Soni
@ManmohanSoni saya yakin ada. Saat ini saya beralih ke pengembangan iOS, jadi saya tidak bisa banyak membantu Anda.
Nativ
15

inilah solusi saya:

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

dan Anda memiliki dua opsi, tulis kode Anda langsung di blok else as commented, atau gunakan nilai boolean yang dikembalikan untuk metode ini untuk menulis kode kustom.

Saya harap kode ini membantu seseorang.

Eng. Samer T
sumber
6

Dari pembaruan yang lebih baru saya telah berakhir dengan kode ini, saya telah membuat metode praktis untuk mengelola semua hal yang berkaitan dengannya ..

Semua detail terkait ketersediaan Layanan dan detail terkait tersedia di sini .

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

Saya menggunakannya seperti ini,

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

Dan untuk versi GoogleApiAvailability.GOOGLE_PLAY_SERVICES_VERSION_CODE;akan memberi Anda.

Dan salah satu jawaban paling berguna yang saya temukan selama penelitian saya ada di sini.

TapanHP
sumber
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
sumber
4

PENTING : GoogleApiAvailability.GOOGLE_PLAY_SERVICES_VERSION_CODE mengembalikan versi minimum yang dibutuhkan oleh aplikasi ANDA, bukan versi layanan bermain yang diinstal pada perangkat pengguna.

steliosf.dll
sumber
1

Saya mengalami masalah yang sama pagi ini. Dan menyelesaikannya atas saran dari stan0. Terima kasih stan0.

Hanya satu perubahan yang diperlukan berdasarkan kode contoh dari 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).
        }
    }
}

Selain itu, Anda perlu menambahkan atribut ke manifest.xml Anda sebagai:

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

Dan nilai "3225130" diambil dari google-play-services_lib yang digunakan proyek Anda. Selain itu, nilai tersebut berada di lokasi yang sama dari manifest.xml di google-play-services_lib.

Semoga bisa membantu.

Simon Gong
sumber
1

Jika Anda mencari Layanan Google Play di Manajer aplikasi, itu akan menunjukkan versi yang diinstal.

dryii
sumber
Saya belum mencoba pendekatan terprogram lain yang tercantum dalam jawaban lain tetapi mencari di manajer aplikasi berhasil untuk saya, terima kasih!
Kent. Green
1

Versi Kotlin yang diperbarui (2019.07.03):

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
sumber
0

gunakan fungsi berikut untuk memeriksa apakah layanan google play dapat digunakan atau tidak

 private boolean checkGooglePlayServicesAvailable() {
    final int connectionStatusCode = GooglePlayServicesUtil.isGooglePlayServicesAvailable(this);
    if (GooglePlayServicesUtil.isUserRecoverableError(connectionStatusCode)) {
        showGooglePlayServicesAvailabilityErrorDialog(connectionStatusCode);
        return false;
    }
    return true;
}
MohammadReza
sumber
0
int apkVersion = GoogleApiAvailability.getInstance().getApkVersion(getContext());

akan mendapatkan hasil yang sama seperti:

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

Tapi yang kedua harus dimasukkan ke dalam uji coba.

Dandan Meng
sumber
-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
sumber
Ini bukanlah solusi.
Stanley Kou