Android: envía los datos de la ubicación en segundo plano periódicamente (cada 30 segundos) y solicita al servidor nuevos datos

Guión:

Publicar en el servidor para obtener nuevos datos en segundo plano cada 30 segundos durante un período largo, es decir, 12 horas. Los datos de ubicación deben enviarse junto con esto.

Implementación actual;

Clase de servicio;

  1. Oyente de la localización con el intervalo de 30 segundos que fija los valores de la longitud y de la latitud a dos variables locales
  2. El administrador de alarmas dispara la intención pendiente cada 30 segundos a un receptor de difusión.
  3. El receptor de emisión inicia un IntentService con variables de ubicación en los extras.
  4. El IntentService http coloca la ubicación y pide nuevos datos del servidor.
  5. IntentService envía la respuesta del servidor a la clase de servicio principal a través del receptor de difusión.

    • La clase de servicio starts_sticky para asegurar que el sistema operativo reinicie.

He intentado algunas variaciones diferentes;

  1. He intentado usar un Handler y runnable para manejar el mecanismo de sincronización para publicar en el servidor sin embargo, el tiempo postDelay pasó de 2 minutos a 7 minutos cuando el dispositivo está dormido.

  2. También intentó disparar IntentService directamente desde el administrador de alarmas pero no pudo cambiar los extras de PendingIntent con las variables de ubicación más actualizadas.

Preguntas;

  1. ¿Es la implementación actual el camino a seguir?

  2. ¿Ir hacia abajo Google GCM ruta ser mucho más beneficioso?

  3. ¿Cómo puedes probar enérgicamente la clase de servicio especialmente con respecto a la recuperación del sistema operativo matándola?

Gracias por adelantado.

Para evitar que el sistema operativo destruya su servicio, debe notificar al usuario que su servicio es un servicio continuo, como se describe en http://developer.android.com/guide/components/services.html#Foreground .

Conseguí que mi servicio se ejecutara cada 2 min en segundo plano usando AlarmManager y WakeLock, como se describe en esta respuesta . Incluso cuando el dispositivo está en reposo, se ejecuta cada 2 minutos. Sólo tienes que configurar la alarma para repetir como

alarmMgr.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime()+5000, 60000 * ALARM_PERIOD_IN_MINUTES, alarmPendingIntent); 

En lugar de configurarlo a un tiempo.

  • El servicio de Android se detiene cuando se cierra la aplicación
  • Enviar datos de Servicio a mi actividad
  • ¿Cómo inicio un servicio que se define en un paquete diferente?
  • Cómo leer los datos del acelerómetro en Service with Android
  • Android: pasa el objeto de la actividad al servicio
  • ¿Es posible crear el widget como Google Play Música en la pantalla de bloqueo?
  • Android: ¿Cómo ejecutar el servicio cuando la aplicación es visible?
  • ¿Necesita ayuda para descargar imágenes de fondo en Android?
  • Intento pendiente de obtener servicio
  • ¿Por qué la aplicación Android basada en Android no está instalando en el dispositivo Android basado en Asistencia-GPS (A-GPS)?
  • Múltiples instancias de IntentService en Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.