LocationClient reconecta automáticamente en `onDisconnect`
Intenté volver a conectar con LocationClient cuando la conexión se pierde (cuando el usuario limpia la RAM).
He intentado usar este código:
- Actualizaciones de ubicación continua en segundo plano
- Android Fused Location API - cómo utilizar PRIORITY_BALANCED_POWER_ACCURACY y PRIORITY_HIGH_ACCURACY en una aplicación?
- Comprobación del estado del GPS con Google Play Services
- GetTriggeringGeofences y getGeofenceTransition de LocationServices
- ¿Debería conectarse y desconectarse de Google Play Services en cada actividad?
private final GooglePlayServicesClient.ConnectionCallbacks mConnectionCallback = new GooglePlayServicesClient.ConnectionCallbacks() { @Override public void onDisconnected() { mLocationClient.removeLocationUpdates(mLocationListener); mLocationClient.disconnect(); mLocationClient= null; mLocationClient= new LocationClient(mContext, mConnectionCallback, mConnectionFailedCallback); mLocationClient.connect(); // NULL POINTER EXCEPTION } @Override public void onConnected(Bundle bundle) { ... } };
Pero obtengo NullPointerException en mLocaitonClient.connect()
.
10-15 08:33:26.478: E/AndroidRuntime(19572): FATAL EXCEPTION: main 10-15 08:33:26.478: E/AndroidRuntime(19572): java.lang.NullPointerException 10-15 08:33:26.478: E/AndroidRuntime(19572): at com.google.android.gms.internal.bh.a(Unknown Source) 10-15 08:33:26.478: E/AndroidRuntime(19572): at com.google.android.gms.internal.kf(Unknown Source) 10-15 08:33:26.478: E/AndroidRuntime(19572): at com.google.android.gms.internal.k$e.onServiceConnected(Unknown Source) 10-15 08:33:26.478: E/AndroidRuntime(19572): at com.google.android.gms.internal.la(Unknown Source) 10-15 08:33:26.478: E/AndroidRuntime(19572): at com.google.android.gms.internal.k.connect(Unknown Source) 10-15 08:33:26.478: E/AndroidRuntime(19572): at com.google.android.gms.location.LocationClient.connect(Unknown Source) 10-15 08:33:26.478: E/AndroidRuntime(19572): at com.myapp.MyLocationClient$1.onDisconnected(MyLocationClient.java:92) 10-15 08:33:26.478: E/AndroidRuntime(19572): at com.google.android.gms.internal.kA(Unknown Source) 10-15 08:33:26.478: E/AndroidRuntime(19572): at com.google.android.gms.internal.k$e.onServiceDisconnected(Unknown Source) 10-15 08:33:26.478: E/AndroidRuntime(19572): at com.google.android.gms.internal.l$a$a.onServiceDisconnected(Unknown Source) 10-15 08:33:26.478: E/AndroidRuntime(19572): at android.app.LoadedApk$ServiceDispatcher.doDeath(LoadedApk.java:1102) 10-15 08:33:26.478: E/AndroidRuntime(19572): at android.app.LoadedApk$ServiceDispatcher$RunConnection.run(LoadedApk.java:1116) 10-15 08:33:26.478: E/AndroidRuntime(19572): at android.os.Handler.handleCallback(Handler.java:615) 10-15 08:33:26.478: E/AndroidRuntime(19572): at android.os.Handler.dispatchMessage(Handler.java:92) 10-15 08:33:26.478: E/AndroidRuntime(19572): at android.os.Looper.loop(Looper.java:137) 10-15 08:33:26.478: E/AndroidRuntime(19572): at android.app.ActivityThread.main(ActivityThread.java:4898) 10-15 08:33:26.478: E/AndroidRuntime(19572): at java.lang.reflect.Method.invokeNative(Native Method) 10-15 08:33:26.478: E/AndroidRuntime(19572): at java.lang.reflect.Method.invoke(Method.java:511) 10-15 08:33:26.478: E/AndroidRuntime(19572): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1006) 10-15 08:33:26.478: E/AndroidRuntime(19572): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:773) 10-15 08:33:26.478: E/AndroidRuntime(19572): at dalvik.system.NativeStart.main(Native Method)
¿Cómo puedo solucionarlo y volver a conectarlo?
- LocationClient requestUpdates onLocationChanged nunca llamado
- Reconocimiento de actividad deja de recibir actualizaciones cuando el teléfono pasa al modo de espera (estado de apagado de la pantalla)
- LocalizaciónClient - Mock Locations
- OnLocationChanged no ha llamado a algunos dispositivos
- No se puede resolver el símbolo 'LocationClient' en Android Studio
- DeadObjectException en GMS :: LocationClient (Android)
- ¿Cuándo debo desconectarme de Google Play Services en mi aplicación de Android?
- Multiple LocationClients está interfiriendo?
Una solución aún más simple es no hacer nada en OnDisconnect
.
public void onDisconnect(){ //do nothing to client }
Cuando la necesidad de utilizar el cliente simplemente comprobar si está conectado
if(mLocationClient.isconnected()){ mLocationClient.connect(); }
Los Servicios de Google Play parecen volver a conectarse bien con el alboroto.
He utilizado esto en 4.0.4 y 4.2.2 con éxito.
¡Encontré la solución! Sólo use el Handler
.
@Override public void onDisconnected() { new Handler().post(new Runnable() { @Override public void run() { mLocationClient.removeLocationUpdates(mLocationListener); mLocationClient.disconnect(); mLocationClient = null; mLocationClient = new LocationClient(mContext, mConnectionCallback, mConnectionFailedCallback); mLocationClient.connect(); // NOW WORKING } } }
En la documentación oficial ( http://developer.android.com/reference/com/google/android/gms/location/LocationClient.html ), está escrito que:
public void disconnect ()
"Cierra la conexión a los servicios de Google Play. No se pueden hacer llamadas en este objeto después de llamar a este método."
Así que no puedes llamar a connect()
justo después, tienes que volver a crear el objeto LocationClient
como lo hiciste la primera vez para conectarte de nuevo.
- Java.lang.RuntimeException: eglSwapBuffers falló: informe EGL_SUCCESS
- No se pudo encontrar com.parse.bolts: bolts-android: 1.1.2. En el proyecto de la brecha del teléfono (estudio del androide)?