android - services - servicios de google play sigue sin funcionar
¿Cómo verificar la versión de los servicios de Google Play? (10)
En mi aplicación, necesito verificar la versión de los servicios de Google Play (que está instalada en el dispositivo del usuario). Es posible ? Y si es así, ¿cómo puedo hacer eso? ¡Busqué en Google pero no pude encontrar nada!
De las actualizaciones más recientes que he terminado con este código, he hecho un método útil para administrar todo lo relacionado con él.
Todos los detalles relacionados con la disponibilidad del Servicio y los detalles relacionados están disponibles here .
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;
}
}
Lo uso así,
GoogleApiAvailability avail;
int PLAY_SERVICE_STATUS = avail.isGooglePlayServicesAvailable(this);
checkPlayService(PLAY_SERVICE_STATUS);
Y para la versión GoogleApiAvailability.GOOGLE_PLAY_SERVICES_VERSION_CODE;
Te regalaré.
Y una de las respuestas más útiles que encontré durante mi investigación está aquí.
Encontré una solución simple:
int v = getPackageManager().getPackageInfo(GoogleApiAvailability.GOOGLE_PLAY_SERVICES_PACKAGE, 0 ).versionCode;
Me he encontrado con el mismo problema esta mañana. Y lo hice por el consejo de stan0. Gracias stan0.
Solo se necesita un cambio en función del código de muestra 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).
}
}
}
Además, debe agregar un atributo a su manifest.xml como:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="your.package.name"
android:versionCode="3225130"
android:versionName="your.version" >
Y el valor de "3225130" está tomado de google-play-services_lib que está usando su proyecto. Además, ese valor reside en la misma ubicación de manifest.xml en google-play-services_lib.
Espero que sea de ayuda.
Si busca Servicios de Google Play en el Administrador de aplicaciones, se mostrará la versión instalada.
Si miras en el enlace provisto por Stan0, verás this :
public static final int GOOGLE_PLAY_SERVICES_VERSION_CODE
Versión mínima del paquete de servicios de Google Play (declarado en AndroidManifest.xml android: versionCode) para que sea compatible con esta versión de cliente. Valor constante: 3225000 (0x003135a8)
Por lo tanto, cuando configura eso en su manifiesto y luego llama a isGooglePlayServicesAvailable(context)
:
public static int isGooglePlayServicesAvailable (Context context)
Verifica que los servicios de Google Play estén instalados y habilitados en este dispositivo, y que la versión instalada en este dispositivo no sea anterior a la requerida por este cliente.
Devoluciones
- código de estado que indica si hubo un error. Puede ser uno de los siguientes en ConnectionResult:
SUCCESS
,SERVICE_MISSING
,SERVICE_VERSION_UPDATE_REQUIRED
,SERVICE_DISABLED
,SERVICE_INVALID
.
Garantizará que el dispositivo utilice la versión que requiere su aplicación, de lo contrario, podrá tomar medidas de acuerdo con la documentación
Editar
GooglePlayServicesUtil.isGooglePlayServicesAvailable()
está en desuso y ahora se debe usar GoogleApiAvailability.isGooglePlayServicesAvailable()
.
aquí está mi solución:
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;
}
}
y tiene dos opciones, escriba su código directamente en else block como se comentó, o use el valor booleano devuelto para este método para escribir código personalizado.
Espero que este código ayude a alguien.
use la siguiente función para verificar si los servicios de google play pueden ser utilizados o no
private boolean checkGooglePlayServicesAvailable() {
final int connectionStatusCode = GooglePlayServicesUtil.isGooglePlayServicesAvailable(this);
if (GooglePlayServicesUtil.isUserRecoverableError(connectionStatusCode)) {
showGooglePlayServicesAvailabilityErrorDialog(connectionStatusCode);
return false;
}
return true;
}
IMPORTANTE : GoogleApiAvailability.GOOGLE_PLAY_SERVICES_VERSION_CODE devuelve la versión mínima requerida por SU aplicación, no la versión de servicios de reproducción que está instalada en el dispositivo del usuario.
int registeredVersion = prefs.getInt(PROPERTY_APP_VERSION, Integer.MIN_VALUE);
int currentVersion = getAppVersion(context);
if (registeredVersion != currentVersion) {
Log.i(TAG, "App version changed.");
return "";
}
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();
}
}