PDA

Ver la Versión Completa : [ CONSULTA ] Dudas con el GPS


superroko2
05/11/12, 11:12:20
Buenas

Estoy desarrollando una aplicación que actualmente tiene tres Activities:

1) Pantalla de logueo que conecta con una BD en MySQL externa.
2) Pantalla que detecta el GPS, obtiene la latitud y longitud actual, envía esos datos a un PHP y recibe unos resultados (varios pares de latitud-longitud). Esto lo hace con AsyncTask.
3) Dibuja los pares de latitud-longitud obtenidos anteriormente en un MapActivity.


El problema: Es que la aplicación está bastante tiempo pensando (AsyncTask) mientras no recibe los datos necesarios del GPS (OnLocationChanged).

Propuesta: Que solo abrir la aplicación, mientras vayas logueandote ya vaya detectando el GPS. Si cuando te has logueado y pasas a la siguiente Activity ya tiene la señal obtenida, la trata directamente. Si no, entonces si te salga el ProgressDialog y siga intentando detectar una señal.

·Aunque pueda parecer absurda, la Activity central es imprescindible, porque aparte de detectar el GPS (que lo podría hacer la propia MapActivity), muestra unos resultados y necesita la interacción del usuario antes de pasar a la MapActivity.

·Tenía pensado hacer:

- Juntar las dos primeras Activities todo en una, y en vez de tener dos Activities, tener dos layouts y cuando se haya logueado y tenga que pasar a mostrar los datos, simplemente cambié el layout (SetContentView).

El problema es que no sé si eso es buena idea? Eso se puede hacer? Se hace? Es muy ineficiente?

Que opináis? Que otras soluciones se os ocurren?

Gracias.

kriogeN
05/11/12, 11:35:02
Pon el código en la pantalla de Login, usa un flag para indicar si has obtenido la posición en el OnLocationChanged. En la segunda Activity consulta ese flag, y si está activo consulta la posición con getLastKnownLocation usando un LocationManager.

Si no está activo entonces puedes usar un AsyncTask que consulte el flag y cuando esté activo obtenga el getLastKnownLocation.

Lo del flag te lo digo porque puede ser que la posición que te de getLastKnownLocation no esté actualizada, así te aseguras que será la última desde que abriste el programa.

superroko2
05/11/12, 12:07:26
Nunca usé flags, me puedes pasar algún enlace con algún pequeño ejemplo o explicación? Gracias.

kriogeN
05/11/12, 12:17:16
Un flag es sólo un valor booleano que te dice si algo ha ocurrido o no. Lo único que tienes que hacer es en el OnLocationChanged poner un booleano a True y luego después consultarlo en la otra Activity.

Obviamente debes tener acceso a ese booleano desde las 2 Activities.

superroko2
05/11/12, 12:26:23
Obviamente debes tener acceso a ese booleano desde las 2 Activities.

Ostias, vale vale. El otro día un compañero también me hablaba de flags en otro campo fuera de Android y me empezaba a perder. Nunca me habían introducido ese termino como tal.

Lo de acceder con ese booleano desde las dos Activities, hay algún método distinto que pasar dicho booleano por Bundle?

Un saludo ;)

dann41
10/11/12, 01:28:38
Si el flag se encuentra en el listener es tan fácil como crear un método para obtener el valor.
Si desde alguna actividad no tienes acceso al listener podrías utilizar el patrón singleton para obtener la instancia del listener y acto seguido consultar ese flag. O declarar el flag cómo público y estático y acceder a él directamente.


FotoPuzzle de DGL Apps. Disfruta de tus ratos muertos.