Multiple LocationClients está interfiriendo?

Estoy trabajando en una aplicación que consiste en un servicio y una actividad. El servicio utiliza un objeto LocationClient para solicitar la ubicación actual cada minuto . La actividad utiliza otro objeto LocationClient para solicitar una única ubicación actual después de hacer clic en un botón.

En el servicio:

mLocationRequest = LocationRequest.create(); mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); mLocationRequest.setInterval(60000); mLocationRequest.setFastestInterval(60000); mLocationClient = new LocationClient(this, this, this); // ... when connected: mLocationClient.requestLocationUpdates(mLocationRequest, this); 

En la actividad:

 mLocationRequest = LocationRequest.create(); mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); mLocationRequest.setInterval(0); // 0 should be ok since only a single location is requested mLocationRequest.setFastestInterval(0); mLocationRequest.setNumUpdates(1); // get only a single location mLocationClient = new LocationClient(this, this, this); // ... when connected: mLocationClient.requestLocationUpdates(mLocationRequest, this); 

El servicio solo funciona como se esperaba.

Sin embargo, si el servicio se inicia y la actividad intenta obtener una única ubicación actual, entonces recibe la ubicación no hasta que el servicio reciba una ubicación actualizada. Así que la actividad tiene que esperar hasta 60 segundos.

Pero si el servicio no se inicia y la actividad intenta obtener una única ubicación actual, recibe la ubicación después de un tiempo corto como se espera (normalmente <5 seg.).

¿Qué está causando el problema? ¿Sólo se permite un LocationListener por aplicación?

Primero: si necesita una ubicación inmediata, no solicite actualizaciones de ubicación, simplemente llame a getLastLocation () en su cliente de ubicación. Esto le dará el mejor / más reciente resultado de ubicación si el LocationClient tiene uno disponible. Si no lo hace, entonces pediría actualizaciones.

Segundo: no creo que haya un límite en cuántos clientes de ubicación puedes tener en una sola aplicación, sin embargo, creo que te estás perdiendo cómo interactúan esos clientes con Google Play Services para recibir actualizaciones. Mirar los documentos proporciona una idea.

Si se desplaza hacia abajo hasta la parte acerca de la especificación de los parámetros de actualización, verá que el tipo LocationClient encuentra entre usted y los datos de ubicación que busca. Todas las demás aplicaciones del teléfono que implementan LocationClient buscan acceder a los mismos datos. LocationClient intenta llenar su solicitud dentro del intervalo que solicitó. Sin embargo, dado que otras aplicaciones que utilizan LocationClient pueden estar intentando acceder a los mismos datos, no se garantiza la sincronización. El mejor ejemplo de esto es setFastestInterval ():

Llamar LocationRequest.setFastestInterval () también ayuda a ahorrar energía. Cuando solicita una tasa de actualización preferida llamando a LocationRequest.setInterval () y una tasa máxima llamando a LocationRequest.setFastestInterval (), su aplicación obtiene la misma velocidad de actualización que la tasa más rápida del sistema. Si otras aplicaciones han solicitado una tasa más rápida, obtendrá el beneficio de una tasa más rápida. Si ninguna otra aplicación tiene una solicitud de tarifa más rápida pendiente, su aplicación recibe actualizaciones a la velocidad especificada con LocationRequest.setInterval ().

Cuando reciba una actualización no está directamente vinculado a cuando lo solicitó. A veces será más pronto, a veces será más tarde. Los intervalos son simplemente una preferencia.

  • 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?
  • Reconocimiento de actividad deja de recibir actualizaciones cuando el teléfono pasa al modo de espera (estado de apagado de la pantalla)
  • ¿Existe una alternativa al Cliente de ubicación (API de Google Play)?
  • Android Fused Location API - cómo utilizar PRIORITY_BALANCED_POWER_ACCURACY y PRIORITY_HIGH_ACCURACY en una aplicación?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.