versiones pie oreo developer caracteristicas android

pie - android versiones



GooglePlayServicesUtil vs GoogleApiDisponibilidad (4)

Estoy intentando utilizar el servicio Google Play en mi aplicación de Android. Como dice el documento de Google, debemos verificar si la API de Google está disponible antes de usarla. He buscado alguna forma de verificarlo. Esto es lo que obtuve:

private boolean checkPlayServices() { int resultCode = GooglePlayServicesUtil.isGooglePlayServicesAvailable(this); if (resultCode != ConnectionResult.SUCCESS) { if (GooglePlayServicesUtil.isUserRecoverableError(resultCode)) { GooglePlayServicesUtil.getErrorDialog(resultCode, this, PLAY_SERVICES_RESOLUTION_REQUEST).show(); } else { Log.i(TAG, "This device is not supported."); finish(); } return false; } return true; }

Pero cuando voy a la página Google Api GooglePlayServicesUtil, https://developers.google.com/android/reference/com/google/android/gms/common/GooglePlayServicesUtil

Me parece que todas las funciones están en desuso . Por ejemplo, el método

GooglePlayServicesUtil.isGooglePlayServicesAvailable (en desuso)

Y Google recomienda usar:

GoogleApiAvailability.isGooglePlayServicesAvailable .

Sin embargo, cuando intento usar GoogleApiAvailability.isGooglePlayServicesAvailable, aparece el mensaje de error:


Comprueba el dispositivo para asegurarte de que tiene el APK de Google Play Services. Si no es así, muestre un cuadro de diálogo que permita a los usuarios descargar el APK de Google Play Store o habilitarlo en la configuración del sistema del dispositivo.

public static boolean checkPlayServices(Activity activity) { final int PLAY_SERVICES_RESOLUTION_REQUEST = 9000; GoogleApiAvailability apiAvailability = GoogleApiAvailability.getInstance(); int resultCode = apiAvailability.isGooglePlayServicesAvailable(activity); if (resultCode != ConnectionResult.SUCCESS) { if (apiAvailability.isUserResolvableError(resultCode)) { apiAvailability.getErrorDialog(activity, resultCode, PLAY_SERVICES_RESOLUTION_REQUEST) .show(); } else { Logger.logE(TAG, "This device is not supported."); } return false; } return true; }


¡La clase https://developers.google.com/android/reference/com/google/android/gms/common/GooglePlayServicesUtil ya no debería usarse!

Así es como se puede usar la clase GoogleApiAvailability su lugar, cuando, por ejemplo, se necesita GCM (o cualquier otro servicio de Google):

public static final int REQUEST_GOOGLE_PLAY_SERVICES = 1972; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (savedInstanceState == null) { startRegistrationService(); } } private void startRegistrationService() { GoogleApiAvailability api = GoogleApiAvailability.getInstance(); int code = api.isGooglePlayServicesAvailable(this); if (code == ConnectionResult.SUCCESS) { onActivityResult(REQUEST_GOOGLE_PLAY_SERVICES, Activity.RESULT_OK, null); } else if (api.isUserResolvableError(code) && api.showErrorDialogFragment(this, code, REQUEST_GOOGLE_PLAY_SERVICES)) { // wait for onActivityResult call (see below) } else { Toast.makeText(this, api.getErrorString(code), Toast.LENGTH_LONG).show(); } } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { switch(requestCode) { case REQUEST_GOOGLE_PLAY_SERVICES: if (resultCode == Activity.RESULT_OK) { Intent i = new Intent(this, RegistrationService.class); startService(i); // OK, init GCM } break; default: super.onActivityResult(requestCode, resultCode, data); } }

ACTUALIZAR:

REQUEST_GOOGLE_PLAY_SERVICES es una constante entera con nombre y valor arbitrarios, a los que se puede hacer referencia en el método onActivityResult() .

Además, llamar a this.onActivityResult() en el código anterior está bien (también puede llamar a super.onActivityResult() en el otro lugar).


He encontrado la solución. En GoogleApiAvailability , todos los métodos son públicos, mientras que en GooglePlayServicesUtil todos los métodos son de función pública estática.

Entonces, para usar GoogleApiAvailability, la forma correcta es:

private boolean checkPlayServices() { GoogleApiAvailability googleAPI = GoogleApiAvailability.getInstance(); int result = googleAPI.isGooglePlayServicesAvailable(this); if(result != ConnectionResult.SUCCESS) { if(googleAPI.isUserResolvableError(result)) { googleAPI.getErrorDialog(this, result, PLAY_SERVICES_RESOLUTION_REQUEST).show(); } return false; } return true; }


Tendrás que usar GoogleApiAvailability en su lugar:

GoogleApiAvailability googleApiAvailability = GoogleApiAvailability.getInstance(); int errorCode = googleApiAvailability.isGooglePlayServicesAvailable(this);

this representa el context .