2011-05-25 10 views
5

Estoy intentando desarrollar una aplicación que utiliza GPS y me gustaría inyectar datos XTRA y referencia de tiempo al GPS para obtener una solución más rápida. Mi código es el siguiente:Inyección de datos de asistencia en el GPS

Bundle bundle = new Bundle(); 
boolean xtraInjection=locationmanager.sendExtraCommand(LocationManager.GPS_PROVIDER,"force_xtra_injection",bundle); 
boolean timeInjection=locationmanager.sendExtraCommand(LocationManager.GPS_PROVIDER,"force_time_injection",bundle); 

No importa si la conexión a Internet está activada o desactivada (sin celulares ni wifi) los booleanos xtraInjection y timeInjection son siempre verdaderas. Por lo tanto, no puedo detectar si la información de asistencia está bien inyectada en el GPS.

Cuando está habilitada la conexión Wi-Fi, el mensaje siguiente aparece registro (sin mensaje de error si wifi es hacia abajo):

I/app ( 627): timeInjection:true 
.... 
D/GpsLocationProvider( 96): NTP server returned: 1306322421969 (WedMay 25 13:20:21 GMT+02:00 2011) reference: 338139 certainty: 77 systemtime offset: 7162 
D/lib_locapi(96): loc_eng_inject_time, uncertainty = 77 

Por el contrario, no hay ningún mensaje de registro relacionada con los datos de XTRA. Si los datos XTRA aún son válidos, el sistema no lo solicita? ¿Cómo puedo ver si se inyecta con éxito?

Para hacer estas pruebas también he intentado borrar datos de asistencia, pero sé que esto no está bien hecho:

Mi código:

boolean reset=locationmanager.sendExtraCommand(LocationManager.GPS_PROVIDER, "delete_aiding_data", null); 

registro:

I/app ( 627): reset:false 
D/lib_locapi( 96): loc_eng_ioctl for aiding data deletion returned 0, 1 for success 

tengo también se intentó con la aplicación GPS STATUS y los resultados son los mismos para ambos, inyectar y eliminar.

En resumen, no sé si el problema está en mi código o algo en la implementación del controlador. ¿Hay alguna manera de obtener más información sobre estos problemas aparte de logcat? (No puedo rootear mi dispositivo).

gracias de antemano

Respuesta

3

Si nos fijamos en frameworks/base/services/java/com/android/server/location/GpsLocationProvider.java, usted encontrará que estos comandos siempre devolverá verdadero.

Hay muy pocas razones por las que debería estar haciendo esto, y algunas de las razones por las que no debe:

  • Android inyectar automáticamente la hora y los datos XTRA cuando la red viene por primera vez después de arrancar. No es necesario reinyectar el tiempo ya que el chip GPS sincronizará su reloj interno con el GPS siempre que tenga una solución. El chip GPS automáticamente solicitará nuevos datos XTRA cuando sea necesario.
  • XTRA solo se aplica al chipset Qualcomm GPS. Los otros proveedores sí tienen servicios equivalentes, pero estos no están expuestos en GpsLocationProvider como XTRA.
  • Lo más probable es que haya una conexión a Internet disponible. En este caso, el GPS simplemente descargará las efemérides del servidor SUPL cuando sea necesario, solo retrocediendo a XTRA cuando esto no sea posible.
+0

Pregunta rápida ... ¿Por qué hay posibilidades de que haya una conexión a Internet disponible? – baash05

+0

tuvo que rechazar, hay muchas aplicaciones que se pueden descargar que parecen hacer justamente esto, y hacen que la conexión al GPS sea más rápida. Además, aunque muchos teléfonos son el objetivo, muchas personas pueden apuntar a dispositivos que solo están conectados cuando dicen que el hardware está en la base. (pensando en aplicaciones empresariales) – baash05

+0

Existen casos de uso válidos. Una es cuando sabes que vas a estar sin una conexión de datos.Digamos que está en el extranjero y ha deshabilitado el roaming de datos, pero tiene conectividad WiFi en algunos lugares: en su hotel, punto de acceso público o similar. En ese caso, puede descargar manualmente los datos de AGPS cuando tenga acceso a WiFi y podrá trabajar con eso durante un tiempo. Sin esto, no podrías usar AGPS y esperarías hasta 20 minutos para obtener una solución. – user149408

Cuestiones relacionadas