Do Geofences permanece activo en android después de reiniciar el dispositivo
Estoy escribiendo una aplicación que necesita usar geofencing para cuando alguien entre / salga de varios sitios a lo largo de la vida de la aplicación que se está instalando.
Mi implementación de geofencing (muy similar al segundo vínculo a continuación) funciona correctamente cuando instalo la aplicación, tanto cuando se mueve dentro / fuera de las geofencias y cuando se usan localizaciones simuladas para simular, hasta que se reinicie un dispositivo.
- LocalizaciónClient - Mock Locations
- DeadObjectException en GMS :: LocationClient (Android)
- Reconocimiento de actividad deja de recibir actualizaciones cuando el teléfono pasa al modo de espera (estado de apagado de la pantalla)
- Actualizaciones de ubicación continua en segundo plano
- Comprobación del estado del GPS con Google Play Services
Al reiniciar, ni las localizaciones de simulación ni los movimientos físicos de entrada y salida de un geofence parecen activar el evento y disparar la intención pendiente a mi receptor de difusión.
He examinado los siguientes tres enlaces y también he leído un poco de los documentos, pero no puedo encontrar una respuesta definitiva a esto en cualquier lugar que hacia arriba dice que las geofencias registradas persisten o no persisten después de un reinicio.
Estos son los enlaces que he revisado sobre desbordamiento de pila: ¿Las geofencias de Android sobreviven a un reinicio?
Android Geofence eventualmente deja de tener intenciones de transición
Hacer que Android Geofences permanezca activo hasta que se haya eliminado / caducado o solo hasta que se inicie mi PendingIntent
Si alguien sabe que la respuesta a si se quedan alrededor de post reboot, o tiene un trabajo alrededor si no lo hacen, sería muy apreciado! Mi última esperanza actualmente es crear un oyente para BOOT_COMPLETED y volver a registrarlos en el arranque, pero prefiero sólo hacer esto si es absolutamente necesario.
¡Muchas gracias por adelantado!
Edit: Aunque no he encontrado una respuesta definitiva (por escrito), estoy bastante seguro de lo que el Sr. TonyC publicado es correcto, y han optado por esa solución. Muchas gracias TonyC!
En caso de que alguien quiera ver la solución que tengo, escucho la acción de arranque completo cuando un dispositivo se inicia, y luego volver a registrar todas las geofences que necesito.
Esto está en el manifiesto:
<!-- Listen for the device starting up --> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/> <receiver android:name="com.YOUR.PACKAGE.geofence.BootCompleteReceiver"> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED"/> </intent-filter> </receiver>
Y luego crear un receptor de difusión para él que volverá a registrar las geofences en el arranque:
package com.YOUR.PACKAGE.geofence; import android.app.PendingIntent.CanceledException; import android.content.Context; import android.content.Intent; import android.support.v4.content.WakefulBroadcastReceiver; import com.google.android.gms.common.ConnectionResult; import com.google.android.gms.common.GooglePlayServicesUtil; import com.google.android.gms.location.Geofence; public class BootCompleteReceiver extends WakefulBroadcastReceiver { private static final String TAG = "BootCompleteReceiver"; @Override public void onReceive(Context context, Intent intent) { //Do what you want/Register Geofences } }
También vale la pena señalar que si usted está dentro de una geofence en el arranque, esto usualmente disparará la intención pendiente de geofence una vez que se haya registrado la geofence.
Así que si por ejemplo, el geofence inicia una aplicación, entonces cuando arrancas un dispositivo que pasa a estar en el geofence, también abrirá la aplicación una vez que el receptor de difusión completo de arranque haya registrado el geofence, y los servicios de localización ha funcionado donde son.
Espero que sea algo de ayuda para alguien.
- LocationClient reconecta automáticamente en `onDisconnect`
- Hacer que Android Geofences permanezca activo hasta que se haya eliminado / caducado o solo hasta que se inicie mi PendingIntent
- ¿Debería conectarse y desconectarse de Google Play Services en cada actividad?
- Multiple LocationClients está interfiriendo?
- API de ubicación de Google: solicita actualizaciones de ubicación con intención pendiente?
- Android Fused Location API - cómo utilizar PRIORITY_BALANCED_POWER_ACCURACY y PRIORITY_HIGH_ACCURACY en una aplicación?
- GetTriggeringGeofences y getGeofenceTransition de LocationServices
- OnLocationChanged no ha llamado a algunos dispositivos
En mi experiencia las geofencias no sobreviven al reinicio. Utilizo un receptor BOOT_COMPLETED tal y como usted sugiere. Funciona bien.
- Envío de un archivo utilizando Bluetooth OBEX Perfil de inserción de objetos (OPP)
- ¿Cómo mostrar varios marcadores en MapFragment en Google Map API v2?