Spanish Monitorear localización desde un servicio

carlos7000

Active Member
Licensed User
Longtime User
Hola a todos.

Tengo una pequeña inquietud.

Deseo crear una sencilla aplicación que me advierta cuando estoy cerca de un lugar dado. Para ello en mi imaginación (aun no lo he probado) he creado el siguiente código:

B4X:
#Region  Service Attributes
    #StartAtBoot: False
    #ExcludeFromLibrary: True
#End Region

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
    
End Sub

Sub Service_Create
    'This is the program entry point.
    'This is a good place to load resources that are not specific to a single activity.
    
    Gps1.Initialize("Gps")
    Gps1.Start(1000, 5) 'Listen to GPS with no filters.
    
    StartServiceAt(Me, DateTime.Now + (10 * 1000), True)
End Sub

Sub Service_Start (StartingIntent As Intent)

End Sub

Sub Service_Destroy

End Sub

Sub Gps_LocationChanged (Location1 As Location)       
    'Guardar coordenadas.
End Sub

Como aun no lo he probado, me pregunto si funcionará, esto debido a que el gps demora unos segundos en inicializar, por lo que supongo que la función Gps_LocationChanged nunca sera llamada ya que el servicio se ejecuta tan rápido y dura en memoria unos mili segundos, me pregunto si este código me puede servir de punto de partida pata monitorear la posición o lo estoy haciendo mal

Saludos.
 

bgsoft

Well-Known Member
Licensed User
Longtime User
Hola, si no es muy sofisticado lo que quieres hacer, puedes hacer algo mas simple y que no tendras esos problemas del GPS que comentas
Puedes emplear la libreria LocationManager , con esta libreria puedes decir si quieres activar la ubicación con gps o con el resto de datos del dispositivo (wifi, gprs, etc) y luego mirar la distancia entre los dos puntos que te interese, algo asi:

B4X:
Dim lm As LocationManager

lm.Initialize("Localizacion")

' para poner en marcha
lm.requestGPSLocation  ' el GPS
lm.requestMobileLocation ' resto del dispositivo

' para pararlo
lm.stopMobileListening
lm.stopGPSListening


' Evento al moverte y tener activo el requestGPSLocation o requestMobileLocation
Sub Localizacion_LocationChanged (Longitude As Double, Latitude As Double, Altitude As Double, Accuracy As Float, Bearing As Float, Provider As String, Speed As Float, Time As Long)
 log("Longitude: " & Longitude & " Latitude: " & Latitude & " Altitude: " & Altitude &  " Accuracy: " & Accuracy &  " Bearing: " & Bearing &  " Speed: " & Speed)
End Sub

 ' CALCULAR DISTANCIA ENTRE PUNTOS libreria gps
Dim Latitude2, Longitude2, Distancia As Double
Dim Location1, Location2 As Location

Location1.Initialize
Location2.Initialize
Location1.Latitude = Latitude1 ' con la que quieres comparar
Location1.Longitude = Longitude1 ' con la que quieres comparar
Location2.Latitude = GPS_Latitud ' la actual del evento
Location2.Longitude =  GPS_Longitud ' la actual del evento
Distancia = Location1.DistanceTo(Location2) ' viene en metros

Saludos
 
Top