Download the free trial version
Basic4android Video
Features
Tutorials and manuals
Showcase
Screenshots

Go Back   Android Development Forum - Basic4android > Foreign Languages > Spanish Forum
Documentation Wiki Register Members List B4P Search Today's Posts Mark Forums Read

[B4A] [Tutorial] GPS

Reply
 
LinkBack Thread Tools Display Modes
  #1 (permalink)  
Old 12-14-2011, 07:32 PM
JorgeMC's Avatar
Knows the basics
 
Join Date: Nov 2011
Location: Madrid (ESPAÑA)
Posts: 56
Default [B4A] [Tutorial] GPS

Para acabar el día, os traigo traducido el Tutorial Oficial GPS en Español para Basic4Android, característica muy importante en la mayoría de dispositivos Android y que gracias a Basic4Android es muy facil de programar. En este tutorial, os vamos a enseñar como mostrar la posición actual por GPS y el estado de los satelites a los que esta conectado el dispositivo Android.



La funcionalidad para poder acceder al GPS del dispositivo Android viene dada por la librería GPS, por lo que lo primero que tenemos que hacer es añadir una referencia a la misma.



Dentro de la librería GPS existen tres objetos relevantes, siendo el más importante de ellos el objeto GPS ya que es el que gestiona la conexión y los eventos del mismo. El segundo de ellos es Location (Posición), es una estructura que contiene los datos de nuestra posición. Los datos que contiene Location principalmente son las coordenadas de Latitud y Longitud, el tiempo y la Altitud a la que nos encontramos, recordando de nuevo que todos ellos dependen de la cobertura GPS que tengamos en ese momento. Con el objeto Location se incluyen también otras funcionalidades con las que podemos calcular la distancia entre dos rutas distintas, entre nuestra posición y otro punto, el cambio de las coordenadas a otros formatos, etc..

Aunque normalmente se utiliza con eventos el objeto Location, como pueda ser LocationChanged (Si hemos cambiado de lugar), también se puede utilizar tal y como dijimos, para calcular rutas entre dos puntos sin tener que estar en funcionamiento el GPS (Que no la librería).

El tercer y último objeto relevante es GPSSatellite, donde podemos obtener el estado de los satélites.

Volviendo al objeto GPS, este debe de ser declarado en Process_Global, ya que si no en caso contrario, deberemos de declararlo cada vez que vayamos a utilizarlo.

El primer paso es iniciar el objeto GPS, utilizando el parámetro Initialize.

Aquí un ejemplo completo sacado del tutorial original:


PHP Code:
Sub Process_Globals
Dim GPS1 
As GPS
End Sub

Sub Globals
Dim lblLon 
As Label
Dim lblLat 
As Label
Dim lblSpeed 
As Label
Dim lblSatellites 
As Label
End Sub

Sub Activity_Create
(FirstTime As Boolean)
If 
FirstTime Then
GPS1
.Initialize("GPS")
End If
Activity.LoadLayout("1")
End Sub

Sub Activity_Resume
If GPS1.GPSEnabled False Then
ToastMessageShow
("Please enable the GPS device."True)
StartActivity(GPS1.LocationSettingsIntent'Will open the relevant settings screen.
Else
GPS1.Start(0, 0) '
Listen to GPS with no filters.
End If
End Sub

Sub Activity_Pause 
(UserClosed As Boolean)
GPS1.Stop
End Sub

Sub GPS_LocationChanged 
(Location1 As Location)
lblLat.Text "Lat = " Location1.ConvertToMinutes(Location1.Latitude)
lblLon.Text "Lon = " Location1.ConvertToMinutes(Location1.Longitude)
lblSpeed.Text "Speed = " Location1.Speed
End Sub

Sub GPS_UserEnabled 
(Enabled As Boolean)
ToastMessageShow("GPS device enabled = " EnabledTrue)
End Sub

Sub GPS_GpsStatus 
(Satellites As List)
lblSatellites.Text "Satellites:" CRLF
For 0 To Satellites.Size 1
Dim Satellite 
As GPSSatellite
Satellite 
Satellites.Get(i)
lblSatellites.Text lblSatellites.Text CRLF Satellite.Prn _
" " Satellite.Snr " " Satellite.UsedInFix " " Satellite.Azimuth _
" " Satellite.Elevation
Next
End Sub 

El siguiente paso es decirle al GPS que se "ponga a escuchar los datos", por lo que hemos creado el evento LocatedChanged para ello. Recordar que el GPS activado de continuo puede consumir excesiva batería, y que para ello nos recomiendan utilizar tanto Activity_Resume como Activity_Pause.

También nos recuerdan que el usuario ha podido desactivar el GPS bien por temas de consumo, como de privacidad, por lo que nos recomiendan preguntar al usuario en el caso de que se encuentre desactivado si quiere activarlo, esto se hace con el siguiente código:


PHP Code:
Sub Activity_Resume
If GPS1.GPSEnabled False Then
ToastMessageShow
("Please enable the GPS device."True)
StartActivity(GPS1.LocationSettingsIntent'Will open the relevant settings screen.
Else
GPS1.Start(0, 0) '
Listen to GPS with no filters.
End If
End Sub 
Si el GPS esta activa este comenzara a procesar / escuchar los datos, los que obtiene de dos valores, minimum time (milisegundos) y minimum distance (metros), generándose un evento cuando uno de los dos ha cambiado de valor (Cosa que podemos aprovechar para ahorrar batería en nuestro programa de alguna manera).


El objeto GPS plantea / tiene tres eventos:

  1. GPS_LocationChanged (Location1 As Location): Evento principal, contiene los datos de la nueva localización.
  2. GPS_GpsStatus (Satellites As List):Este evento permite mostrar información sobre los satélites actualmente disponibles. Tenemos que tener en cuenta que no todos los satélites en la lista son realmente utilizados para el cálculo del ejemplo anterior. Por lo tanto, es posible que la lista se incluyen varios satélites, pero la recepción no es lo suficientemente bueno para una buena localización.
  3. GPS_UserEnabled (Enabled As Boolean): Este evento se produce cuando el usuario cambia el estado del dispositivo GPS.


Quote:
Enlace al Tutorial Original en Ingles:

http://www.basic4ppc.com/forum/basic...-tutorial.html
Quote:
Enlace al Tutorial Original en Español:

Basic4Android - Tutorial Oficial GPS en Español | Historias de un Cazique
Attached Files
File Type: zip Tutorial GPS.zip (6.3 KB, 39 views)
__________________
Mi blog: www.historiasdeuncazique.com

Last edited by JorgeMC : 12-15-2011 at 08:20 AM. Reason: V1.1 Añadidas imágenes del mensaje original
Reply With Quote
  #2 (permalink)  
Old 12-14-2011, 07:33 PM
JorgeMC's Avatar
Knows the basics
 
Join Date: Nov 2011
Location: Madrid (ESPAÑA)
Posts: 56
Default

Por favor, cualquier error, aclaración, mejora o lo que sea comentarlo por aquí. No es que el Ingles sea mi fuerte, pero si puedo aportar mi granito de arena bienvenido sea.

__________________
Mi blog: www.historiasdeuncazique.com
Reply With Quote
  #3 (permalink)  
Old 12-14-2011, 10:34 PM
Junior Member
 
Join Date: Sep 2011
Location: Granada, Spain
Posts: 45
Default

Estupendo!!! Ya tenemos otro tutorial!!! Y nada menos que el del GPS.

Asi da gusto. Pronto tendremos aqui una enciclopedia más que un foro.

Venga! Una chincheta para este tema!!! Que lo vea todo el mundo!!!
Reply With Quote
  #4 (permalink)  
Old 12-15-2011, 08:22 AM
JorgeMC's Avatar
Knows the basics
 
Join Date: Nov 2011
Location: Madrid (ESPAÑA)
Posts: 56
Default

Si alguien tiene algún programa de GPS o quiere añadir, modificar o lo que sea que lo comente para añadirlo.

Gracias a ti iliberis por el trabajo que haces
__________________
Mi blog: www.historiasdeuncazique.com
Reply With Quote
  #5 (permalink)  
Old 12-15-2011, 03:49 PM
Junior Member
 
Join Date: Sep 2011
Location: Granada, Spain
Posts: 45
Default

Quote:
Originally Posted by JorgeMC View Post
Gracias a ti iliberis por el trabajo que haces
Hacemos, hacemos. Que si esto está empezando a levantarse, es porque estamos ya unos cuantos escribiendo mensajes y ayudando con los tutoriales. Y que siga asi mucho tiempo. Entre todos estamos consiguiendo lo unico que le falta a este lenguaje: una comunidad estable.
Reply With Quote
  #6 (permalink)  
Old 12-22-2011, 03:07 AM
Newbie
 
Join Date: Nov 2011
Location: Chile
Posts: 9
Default GRACIAS con mayúscula

Con esta ayuda se nos hace cada vez más fácil aprovechar los recursos que tienen los equipos Android
Reply With Quote
  #7 (permalink)  
Old 01-26-2012, 05:02 PM
Junior Member
 
Join Date: Nov 2011
Posts: 24
Default

Hola a todos.
Voy a aprovechar para haceros una pregunta sobre el GPS.
Si lo creéis necesario, pongo esta pregunta en un nuevo post.

Quiero hacer un programita muy sencillo con un único botón
Cuando se pulsa ese botón envío un SMS (o mail o lo que sea, esto me da igual) con la posición actual recibida del GPS.
Lo que he hecho es basarme en el tutorial que ha traducido jorgemc. Pero claro, ese ejemplo está pensado para una recepción continua de posiciones, por ejemplo adecuado para un programa de navegación. Pero a mí no me vale, porque yo necesito la posición actual lo más rápidamente posible.

Esta es la filosofía de mi programa: cuando la actividad empieza (Resume) hago el start del GPS (como en el tutorial) y en cada evento voy almacenando la posición en una variable (en Globals, no en Process_Globals). Así, al pulsar el botón cojo la última posición almacenada y la envío. Hasta aquí todo parece razonable.
Pero no, ya que el usuario no lleva encendida continuamente mi aplicación, sino que la arranca y pulsa el botón para enviar la posición. En ese caso, como el GPS tarda un rato (largo relativamente) en posicionar, pues hay que esperar bastante hasta que entra el evento de posición del GPS y se puede enviar.
La pregunta es ¿hay alguna forma de tener rápidamente la posición? Aunque no sea exacta. Pero que permita obtener una posición aproximada en muy poco tiempo.
O quizás la filosofía del programa debería ser otra...
¿Qué opináis?
Gracias a todos por adelantado.
Reply With Quote
  #8 (permalink)  
Old 01-26-2012, 09:59 PM
JorgeMC's Avatar
Knows the basics
 
Join Date: Nov 2011
Location: Madrid (ESPAÑA)
Posts: 56
Default

Es muy fácil en principio, te paso un ejemplo para que veas:

Code:
Sub Process_Globals
    
'These global variables will be declared once when the application starts.
    'These variables can be accessed from all modules.
    Dim GPS1 As GPS
    
Dim lon, lat As String
    
Dim SMTP As SMTP
    
End Sub
Code:
Sub Activity_Create(FirstTime As Boolean)
    GPS1.Initialize(
"GPS")
    GPS1.Start(
00)
    Location1.Initialize
End Sub
Code:
Sub GPS_LocationChanged (Location1 As Location)
    
    lon = Location1.ConvertToSeconds(Location1.Longitude)
    lat= Location1.ConvertToSeconds(Location1.Latitude)
    
SMTP.Initialize("smtp.gmail.com"465"tucuenta@gmail.com""tupassword""SMTP")
    
SMTP.UseSSL = True 
    
SMTP.To.Add("correoalquequieresenviar@hotmail.com")
    
SMTP.Subject = "MENSAJE DE ALERTA DE MOVIL"
    
SMTP.Body = "La localizacion del movil +34XXXXXXXXX es Longitud: "& Location1.ConvertToSeconds(Location1.Longitude)&" y Latitud: "& Location1.ConvertToSeconds(Location1.Latitude)
    
SMTP.Send
    
    
End Sub
Te lo escrito más o menos de memoria, pero te tendría que funcionar. Con lo que te e puesto, cada vez que cambie la posición te envía un correo, ahora solo tienes que cambiar ese evento por el del click del button que quieres, manteniendo únicamente esta parte del código para que almacene los datos de la posición:

Code:
Sub GPS_LocationChanged (Location1 As Location)
    
    lon = Location1.ConvertToSeconds(Location1.Longitude)
    lat= Location1.ConvertToSeconds(Location1.Latitude)
    
    
End Sub


Si no te sale pon el código por aquí que te ayudamos.

Saludos
__________________
Mi blog: www.historiasdeuncazique.com
Reply With Quote
  #9 (permalink)  
Old 01-27-2012, 05:16 AM
Junior Member
 
Join Date: Nov 2011
Posts: 24
Default

Muchas gracias jorgemc.
Me viene muy bien tu ejemplo.
El problema es que no es eso exactamente lo que necesito (creo que me expliqué fatal ayer).
En resumen, quiero hacer una aplicación que la arranques, pulsas un botón y envía un mail con tu posición. Y todo esto en el mínimo tiempo posible.
He hecho una prueba con el código que has puesto y funciona, pero con varios problemas (para lo que yo necesito):
1. Tienes que estar en un lugar al aire libre para que se posicione el GPS
2. Tarda un rato en posicionarse
Por eso estoy buscando una solución que rápidamente pueda enviar una localización aproximada. O que se pueda obtener la última localización que se obtuvo en el móvil.
He visto que existe la librería ABWifi, pero no sé si es para esto...
¿Se te ocurre alguna solución?

De nuevo, gracias jorgemc.
Reply With Quote
  #10 (permalink)  
Old 01-27-2012, 09:51 AM
JorgeMC's Avatar
Knows the basics
 
Join Date: Nov 2011
Location: Madrid (ESPAÑA)
Posts: 56
Default

OK, miro la librería esa y lo que podemos hacer es utilizarla con un timer y una condición, me explico:

Pulsas Botón -> Le damos 5 / 10 segundillos para ver si el GPS localiza -> Aquí entra la condición, si lat & lon = 0, que tire de la librería que comentas (No se lo que tardara esa librería).
__________________
Mi blog: www.historiasdeuncazique.com
Reply With Quote
Reply


Currently Active Users Viewing This Thread: 1 (0 members and 1 guests)
 
Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are Off
Pingbacks are Off
Refbacks are On

Similar Threads
Thread Thread Starter Forum Replies Last Post
SQL tutorial Erel Basic4android Getting started & Tutorials 74 05-23-2012 11:27 PM
GPS tutorial Erel Basic4android Getting started & Tutorials 62 05-22-2012 02:04 PM
SQL Tutorial klaus German Tutorials 2 11-11-2011 03:15 PM
SQL Tutorial Erel Tutorials 32 02-07-2011 09:14 AM
Need SQL tutorial Cableguy Basic4android Updates and Questions 11 11-30-2010 07:03 AM


All times are GMT. The time now is 01:09 PM.


Powered by vBulletin® Version 3.6.12
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.3.0