Como verificar a versão do Google Play Services?


95

Em meu aplicativo, preciso verificar a versão do Google Play Services (instalada no dispositivo do usuário). É possível ? E se sim, como posso fazer isso? Procurei no Google mas não encontrei nada!

Respostas:


94

Encontrei uma solução simples:

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

Mas versionCodeestá obsoleto na API 28, então você pode usar PackageInfoCompat:

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

6
Como saber o código da versão dos serviços do jogo versão 10.2
— Manmohan Soni

Como versionCode está obsoleto com API28, você deve usar PackageInfoCompat.getLongVersionCode
— G00fY

51

Se você olhar no link fornecido por Stan0, verá o seguinte :

public static final int GOOGLE_PLAY_SERVICES_VERSION_CODE

Versão mínima do pacote de serviços do Google Play (declarada em AndroidManifest.xml android: versionCode) para ser compatível com esta versão do cliente. Valor constante: 3225000 (0x003135a8)

Então, quando você definir isso em seu manifesto e chamar isGooglePlayServicesAvailable(context):

public static int isGooglePlayServicesAvailable (Context context)

Verifica se o Google Play Services está instalado e ativado neste dispositivo e se a versão instalada neste dispositivo não é mais antiga do que a exigida por este cliente.

Devoluções

  • código de status indicando se houve um erro. Pode ser um dos seguintes na ConnectionResult: SUCCESS, SERVICE_MISSING, SERVICE_VERSION_UPDATE_REQUIRED, SERVICE_DISABLED, SERVICE_INVALID.

Isso garantirá que o dispositivo esteja usando a versão que seu aplicativo requer, caso contrário, você pode tomar medidas de acordo com a documentação

Editar

GooglePlayServicesUtil.isGooglePlayServicesAvailable()está obsoleto e agora GoogleApiAvailability.isGooglePlayServicesAvailable()deve ser usado em seu lugar.


2
GoogleApiAvailability agora é um singleton, então você deve usar: GoogleApiAvailability.getInstance (). IsGooglePlayServicesAvailable (activity)
— Nativ

@Nativ existe alguma maneira de verificar se a versão dos serviços do Google Play em execução no dispositivo Android é superior a 10.2 ou não
— Manmohan Soni

@ManmohanSoni Tenho certeza que sim. No momento, mudei para o desenvolvimento para iOS, então não posso ser de grande ajuda para você.
— Nativ de

15

aqui está minha solução:

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

e você tem duas opções, escrever seu código diretamente no bloco else como comentado ou usar o valor booleano retornado para este método para escrever código personalizado.

Espero que este código ajude alguém.


6

A partir de atualizações mais recentes, acabei com este código, criei um método útil para gerenciar todas as coisas relacionadas a ele.

Todos os detalhes relacionados à disponibilidade do Serviço e detalhes relacionados estão disponíveis aqui .

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

Eu uso assim,

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

E para a versão GoogleApiAvailability.GOOGLE_PLAY_SERVICES_VERSION_CODE;vai te dar.

E uma das respostas mais úteis que encontrei durante minha pesquisa está aqui.


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

IMPORTANTE : GoogleApiAvailability.GOOGLE_PLAY_SERVICES_VERSION_CODE retorna a versão mínima exigida pelo SEU aplicativo, não a versão do Play Services que está instalada no dispositivo do usuário.


1

Eu tive o mesmo problema esta manhã. E conseguiu isso seguindo o conselho de Stan0. Obrigado, stan0.

Apenas uma alteração é necessária com base no código de amostra de 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).
        }
    }
}

Além disso, você precisa adicionar um atributo ao seu manifest.xml como:

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

E o valor de "3225130" é obtido do google-play-services_lib que seu projeto está usando. Além disso, esse valor reside no mesmo local de manifest.xml em google-play-services_lib.

Espero que seja de ajuda.


1

Se você procurar o Google Play Services no gerenciador de aplicativos, ele mostrará a versão instalada.


Não tentei as outras abordagens programáticas listadas em outras respostas, mas pesquisar no gerenciador de aplicativos funcionou para mim, obrigado!
— Kent.Green de

1

Atualizado (03.07.2010) Versão 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

use a seguinte função para verificar se os serviços do Google Play podem ser usados ​​ou não

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

obterá o mesmo resultado que:

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

Mas o segundo precisa ser colocado dentro de um try-catch.


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

Esta não é uma solução.
— Stanley Kou
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.