mirror of
https://github.com/KeymonSoft/Guna_Preventa.git
synced 2026-04-17 12:56:17 +00:00
637 lines
24 KiB
QBasic
637 lines
24 KiB
QBasic
B4A=true
|
|
Group=Default Group
|
|
ModulesStructureVersion=1
|
|
Type=Service
|
|
Version=10.2
|
|
@EndOfDesignText@
|
|
'#Region Service Attributes
|
|
' #StartAtBoot: True
|
|
'#End Region
|
|
''******************************************************************************
|
|
''No olvidar agregar esta linea al editor de manifiesto:
|
|
'' SetServiceAttribute(Tracker, android:foregroundServiceType, "location")
|
|
''
|
|
''En Starter agregar estas lineas en Process_Globals
|
|
'' Public rp As RuntimePermissions
|
|
'' Public FLP As FusedLocationProvider
|
|
'' Private flpStarted As Boolean
|
|
''
|
|
''En Main agregar estas lineas a Activity_Resume
|
|
'' Starter.rp.CheckAndRequest(Starter.rp.PERMISSION_ACCESS_FINE_LOCATION)
|
|
'' Wait For Activity_PermissionResult (Permission As String, Result As Boolean)
|
|
'' If Result Then
|
|
'' StartService(Tracker)
|
|
'' Log("Start Tracker")
|
|
'' Else
|
|
'' ToastMessageShow("No permission", True)
|
|
'' End If
|
|
''
|
|
''Se necesitan las librerias FusedLocationProvider, GPS, Phone y RunTimePermissions
|
|
''
|
|
''Y en Main agregar estas dos lineas:
|
|
''#AdditionalJar: com.android.support:support-v4
|
|
''#AdditionalJar: com.google.android.gms:play-services-location
|
|
'
|
|
'Sub Process_Globals
|
|
' Private nid As Int = 51042
|
|
' Private Tracking As Boolean
|
|
' Private lock As PhoneWakeState
|
|
' 'Para FusedLocationProvider (2 lineas)
|
|
' Public FLP As FusedLocationProvider
|
|
' Dim actualLR As LocationRequest
|
|
' Private flpStarted As Boolean
|
|
'' Dim locRequest As String
|
|
' Dim UUGCoords As Location 'Ultima Ubicacion Guardada
|
|
'End Sub
|
|
'
|
|
'Sub Service_Create
|
|
' Service.AutomaticForegroundMode = Service.AUTOMATIC_FOREGROUND_NEVER 'we are handling it ourselves
|
|
' 'Para FusedLocationProvider (2 lineas)
|
|
' FLP.Initialize("flp")
|
|
' FLP.Connect
|
|
' lock.PartialLock
|
|
' StartFLP
|
|
'End Sub
|
|
'
|
|
'Sub flp_ConnectionSuccess
|
|
'' Log("Connected to location provider")
|
|
' 'FLP.GetLastKnownLocation
|
|
'End Sub
|
|
'
|
|
'Sub flp_ConnectionFailed(ConnectionResult1 As Int)
|
|
' Log("Failed to connect to location provider")
|
|
'End Sub
|
|
'
|
|
'Sub Service_Start (StartingIntent As Intent)
|
|
' 'Para FusedLocationProvider (1 linea)
|
|
' Service.StopAutomaticForeground
|
|
' Service.StartForeground(nid, CreateNotification("..."))
|
|
' Track
|
|
' StartServiceAt(Me, DateTime.Now + 5 * DateTime.TicksPerMinute, True)
|
|
' FLP.GetLastKnownLocation.Initialize
|
|
'End Sub
|
|
'
|
|
'Public Sub Track
|
|
'' Log("Inicia Track - Tracking : "&Tracking)
|
|
' If Not(FLP.IsInitialized) Then FLP.Initialize("flp")
|
|
' If Not(FLP.IsConnected) Then FLP.Connect
|
|
' If Tracking And actualLR.IsInitialized Then
|
|
'' Log(actualLR.GetSmallestDisplacement)
|
|
' Return 'Si ya estamos "rastreando" no hacemos nada (return)
|
|
' End If
|
|
' If Starter.rp.Check(Starter.rp.PERMISSION_ACCESS_FINE_LOCATION) = False Then
|
|
' Log("No permission")
|
|
' Return
|
|
' End If
|
|
' StartFLP 'Iniciamos FusedLocationProvider
|
|
' Tracking = True
|
|
'End Sub
|
|
'
|
|
'Public Sub StartFLP
|
|
' Log("StartFLP - flpStarted="&flpStarted)
|
|
' Do While FLP.IsConnected = False
|
|
' Sleep(500)
|
|
'' Log("sleeping")
|
|
' Loop
|
|
'' If flpStarted = False Then
|
|
'' Log("RequestLocationUpdates")
|
|
' FLP.RequestLocationUpdates(CreateLocationRequest) 'Buscamos ubicacion
|
|
'' Log("Buscamos ubicacion")
|
|
'' Log(actualLR.GetSmallestDisplacement)
|
|
' flpStarted = True
|
|
'' End If
|
|
'End Sub
|
|
'
|
|
'Public Sub StartFLPSmall
|
|
'' Log("StartFLPSmall - flpStarted="&flpStarted)
|
|
' Do While FLP.IsConnected = False
|
|
' Sleep(500)
|
|
' Log("sleeping")
|
|
' Loop
|
|
' dameUltimaUbicacionConocida 'Regresamos ultima ubicacion conocida
|
|
' FLP.RequestLocationUpdates(CreateLocationRequestSmallD) 'Buscamos ubicacion 2 peticiones
|
|
'' Log("Buscamos ubicacion Small displacement")
|
|
'' Log("GPSSmallestDisplacement = " & actualLR.GetSmallestDisplacement)
|
|
'End Sub
|
|
'
|
|
'Private Sub CreateLocationRequest As LocationRequest
|
|
'' Log("CreateLocationRequest")
|
|
' Dim lr As LocationRequest
|
|
' lr.Initialize
|
|
' lr.SetInterval(10000) 'Intervalo deseado para actualizaciones de ubicacion
|
|
' lr.SetFastestInterval(lr.GetInterval / 2) 'Intervalo minimo para actualizaciones de ubicacion
|
|
' lr.SetSmallestDisplacement(40) 'Solo registra cambio de ubicacion si es mayor a XX mts
|
|
' lr.SetPriority(lr.Priority.PRIORITY_HIGH_ACCURACY)
|
|
' actualLR=lr
|
|
' Return lr
|
|
'End Sub
|
|
'
|
|
'Private Sub CreateLocationRequestSmallD As LocationRequest
|
|
' Log("Iniciamos CreateLocationRequestSmallD")
|
|
' Dim lr As LocationRequest
|
|
' lr.Initialize
|
|
' lr.SetInterval(2000) 'Intervalo deseado para actualizaciones de ubicacion
|
|
' lr.SetFastestInterval(lr.GetInterval / 2) 'Intervalo minimo para actualizaciones de ubicacion
|
|
' lr.setNumUpdates(2) 'Solicitamos solo 2 actualizaciones con estos parametros
|
|
' lr.SetSmallestDisplacement(0) 'Solo registra cambio de ubicacion si es mayor a XX mts
|
|
' lr.SetPriority(lr.Priority.PRIORITY_HIGH_ACCURACY)
|
|
' actualLR=lr
|
|
' Return lr
|
|
'End Sub
|
|
'
|
|
'Sub dameUltimaUbicacionConocida
|
|
' If FLP.GetLastKnownLocation.IsInitialized Then 'Mandamos ultima ubicacion guardada
|
|
'' If Main.logger Then Log("Mandamos UUC : "&formatoFecha(FLP.GetLastKnownLocation.Time))
|
|
' If Starter.Logger Then LogColor($"Mandamos UUC "${Subs.fechaKMT(FLP.GetLastKnownLocation.Time)}|Acc:$0.2{FLP.GetLastKnownLocation.Accuracy}|$0.8{FLP.GetLastKnownLocation.Latitude}|$0.8{FLP.GetLastKnownLocation.Longitude}|Spd:$0.2{FLP.GetLastKnownLocation.Speed}|"$, Colors.RGB(255,112,35))
|
|
' Dim coords As String = FLP.GetLastKnownLocation.Latitude&","&FLP.GetLastKnownLocation.Longitude&","&formatoFecha(FLP.GetLastKnownLocation.Time)
|
|
' CallSubDelayed2(FirebaseMessaging,"mandamosLoc",coords)
|
|
'' Subs.mandamosLoc(coords)
|
|
' End If
|
|
'End Sub
|
|
'
|
|
'Public Sub StopFLP
|
|
' 'Log("StopFLP")
|
|
' If flpStarted Then
|
|
' FLP.RemoveLocationUpdates 'Eliminamos todas las solicitudes de ubicacion
|
|
' flpStarted = False
|
|
' End If
|
|
'End Sub
|
|
'
|
|
'Sub flp_LocationChanged (Location1 As Location)
|
|
'' ToastMessageShow("Loc changed", False)
|
|
' LogColor($"Loc changed:${Location1.Longitude},${Location1.Latitude}"$, Colors.Red)
|
|
' B4XPages.MainPage.lat_gps = Location1.Latitude
|
|
' B4XPages.MainPage.lon_gps = Location1.Longitude
|
|
' UUGCoords = Location1
|
|
'' Starter.ubicacionActual = Location1
|
|
'' Log("SmallestDisplacement="&actualLR.GetSmallestDisplacement)
|
|
'' If DateTime.Now > LastUpdateTime + 10 * DateTime.TicksPerSecond Then
|
|
'' Dim n As Notification = CreateNotification($"$2.5{Location1.Latitude} / $2.5{Location1.Longitude}"$)
|
|
'' n.Notify(nid)
|
|
'' LastUpdateTime = DateTime.Now
|
|
'' End If
|
|
' If B4XPages.MainPage.lat_gps = 0 Or B4XPages.MainPage.lat_gps = Null And FLP.GetLastKnownLocation.IsInitialized Then
|
|
' B4XPages.MainPage.lat_gps = FLP.GetLastKnownLocation.Latitude
|
|
' B4XPages.MainPage.lon_gps = FLP.GetLastKnownLocation.Longitude
|
|
' Starter.ubicacionActual = FLP.GetLastKnownLocation
|
|
' LogColor("Coords en CERO - Guardamos ultima ubicacion conocida", Colors.red)
|
|
' End If
|
|
' '/////// para la ultima localización FL
|
|
' Dim sDate,sTime As String
|
|
' DateTime.DateFormat = "MM/dd/yyyy"
|
|
' sDate=DateTime.Date(DateTime.Now)
|
|
' sTime=DateTime.Time(DateTime.Now)
|
|
' If Not(B4XPages.MainPage.skmt.IsInitialized) Then B4XPages.MainPage.skmt.Initialize(Starter.ruta,"kmt.db", True)
|
|
' Try
|
|
' B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO HIST_GPS (HGDATE, HGLAT, HGLON) VALUES(?,?,?) ", Array As Object (sDate & sTime, B4XPages.MainPage.lat_gps, B4XPages.MainPage.lon_gps))
|
|
' B4XPages.MainPage.skmt.ExecNonQuery("DELETE FROM HIST_GPS")
|
|
' Catch
|
|
' LogColor(LastException, Colors.Red)
|
|
' End Try
|
|
' '///////
|
|
' Dim coords As String = Location1.Latitude&","&Location1.Longitude&","&formatoFecha(Location1.Time)
|
|
'' Log("Loc changed : "&Location1.Latitude&","&Location1.Longitude&"|"&B4XPages.MainPage.usuario&"|")
|
|
'' Log("Mandamos Ubicacion")
|
|
' Log(FirebaseMessaging.locRequest)
|
|
' ' Solo mandamos la ubicacion si la precision es menor a XX mts
|
|
' If Location1.Accuracy < 100 Then
|
|
'' CallSubDelayed2(FirebaseMessaging,"mandamosLoc",coords)
|
|
' End If
|
|
' If B4XPages.MainPage.cliente.LA_GPS.IsInitialized Then
|
|
' B4XPages.MainPage.cliente.LA_GPS.Text = "CON UBICACION GPS"
|
|
' B4XPages.MainPage.cliente.LA_GPS.TextColor = Colors.Black
|
|
' End If
|
|
'' LogColor(Location1.Latitude, Colors.red)
|
|
' CallSub2(Starter, "GPS_LocationChanged", Location1)
|
|
'' CallSub2(gestion, "GPS_LocationChanged", Location1)
|
|
' CallSub2(B4XPages.GetPage("Cliente"), "GPS_LocationChanged", Location1)
|
|
'' CallSub2(nuevocliente, "GPS_LocationChanged", Location1)
|
|
'End Sub
|
|
'
|
|
'Sub CreateNotification (Body As String) As Notification
|
|
' Dim notification As Notification
|
|
' notification.Initialize2(notification.IMPORTANCE_LOW)
|
|
' notification.Icon = "icon"
|
|
' notification.SetInfo("GUNA", Body, Main)
|
|
' Return notification
|
|
'End Sub
|
|
'
|
|
'Sub Service_Destroy
|
|
' If Tracking Then
|
|
' StopFLP
|
|
' End If
|
|
' Tracking = False
|
|
' lock.ReleasePartialLock
|
|
'End Sub
|
|
'
|
|
'Sub formatoFecha(fecha As String) As String 'Convierte una fecha al formato yyMMddHHmmss
|
|
'' Log(fecha)
|
|
' Dim OrigFormat As String = DateTime.DateFormat 'save orig date format
|
|
' DateTime.DateFormat="yyMMddHHmmss"
|
|
' Dim lastUpdate As String=DateTime.Date(fecha)
|
|
' DateTime.DateFormat=OrigFormat 'return to orig date format
|
|
'' Log(lastUpdate)
|
|
' Return lastUpdate
|
|
'End Sub
|
|
'
|
|
''Revisamos que el FLP (FusedLocationProvider) este inicializado y activo
|
|
'Sub revisaFLP 'ignore
|
|
' LogColor("**** **** Revisamos FLP **** ****", Colors.RGB(78,0,227))
|
|
' Private todoBienFLP As Boolean = True
|
|
' Try
|
|
' If Not(FLP.IsInitialized) Then
|
|
' Subs.log2DB("revisaFLP: No esta inicializado ... 'Reinicializando FLP'")
|
|
' FLP.Initialize("flp")
|
|
' todoBienFLP = False
|
|
' End If
|
|
' Catch
|
|
' LogColor("If Not(Tracker.FLP.IsInitialized) --> "&LastException, Colors.Red)
|
|
' End Try
|
|
' Try
|
|
' If FLP.IsInitialized Then
|
|
' Try
|
|
' If Not(FLP.IsConnected) Then
|
|
' Subs.log2DB("revisaFLP: No esta conectado ... 'Reconectando FLP'")
|
|
' ' Tracker.FLP.Connect
|
|
' StartFLP
|
|
' todoBienFLP = False
|
|
' End If
|
|
' Catch
|
|
' LogColor("If Not(Tracker.FLP.IsConnected) --> "&LastException, Colors.Red)
|
|
' End Try
|
|
' Try
|
|
' If FLP.IsConnected And _
|
|
' FLP.GetLastKnownLocation.IsInitialized And _
|
|
' FLP.GetLastKnownLocation.DistanceTo(UUGCoords) > 500 Then
|
|
' Subs.log2DB("revisaFLP: 'No se esta actualizando, lo reiniciamos ...'")
|
|
' StartService(Me)
|
|
' todoBienFLP = False
|
|
' End If
|
|
' Catch
|
|
' LogColor("If FLP.IsConnectctd and FLP.getLKL.IsInitialized --> "&LastException, Colors.Red)
|
|
' End Try
|
|
' End If
|
|
' If todoBienFLP Then LogColor(" +++ +++ Sin errores en FLP", Colors.Green)
|
|
' Catch
|
|
' LogColor("If Tracker.FLP.IsInitialized --> "&LastException, Colors.Red)
|
|
' End Try
|
|
' ' revisar hora de lastKnownlocation y si es mayor de 10 minutos llamar StartFLP
|
|
'End Sub
|
|
'
|
|
''Compara la UUG (Ultima Ubicacion Guardada) con FLP.LastKnowLocation y si
|
|
''cumple con los requisitos de distancia y precision la guardamos en la BD.
|
|
'Sub revisaUUG 'ignore
|
|
' Try
|
|
'' revisaFLP
|
|
' If FLP.IsInitialized And FLP.IsConnected Then
|
|
' Try
|
|
' If FLP.GetLastKnownLocation.IsInitialized Then
|
|
'' Dim x As Location = FLP.GetLastKnownLocation
|
|
' Dim daa As Int = UUGCoords.DistanceTo(FLP.GetLastKnownLocation) 'Distancia de la UUG a la actual de Tracker.FLP.GetLastKnownLocation
|
|
' If Starter.Logger Then LogColor($"**** UUC "${Subs.fechaKMT(FLP.GetLastKnownLocation.Time)}|$0.2{FLP.GetLastKnownLocation.Accuracy}|$0.8{FLP.GetLastKnownLocation.Latitude}|$0.8{FLP.GetLastKnownLocation.Longitude}|$0.2{FLP.GetLastKnownLocation.Speed}|"$, Colors.RGB(255,112,35))
|
|
' If daa > 40 And FLP.GetLastKnownLocation.Accuracy < 35 Then 'Si la distancia de la ubicacion anterior es mayor de XX y la precision es menor de XX, la guardamos ...
|
|
' B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO RUTA_GPS(fecha, lat, lon) VALUES (?,?,?)", Array As Object (Subs.fechaKMT(FLP.GetLastKnownLocation.Time),FLP.GetLastKnownLocation.Latitude,FLP.GetLastKnownLocation.Longitude))
|
|
' If Starter.Logger Then Log("++++ Distancia a anterior="&daa&"|"&"Precision="&FLP.GetLastKnownLocation.Accuracy)
|
|
' End If
|
|
' UUGCoords = FLP.GetLastKnownLocation
|
|
' End If
|
|
' Catch
|
|
' LogColor("FLP.GetLastKnownLocation.IsInitialized --> "&LastException, Colors.Red)
|
|
' End Try
|
|
' Else
|
|
' Log("StartFLP")
|
|
' StartFLP
|
|
' End If
|
|
' Catch
|
|
' LogColor("If FLP.IsInitialized --> "&LastException, Colors.Red)
|
|
' End Try
|
|
'End Sub
|
|
|
|
|
|
#Region Service Attributes
|
|
#StartAtBoot: True
|
|
#End Region
|
|
'******************************************************************************
|
|
'No olvidar agregar esta linea al editor de manifiesto:
|
|
' SetServiceAttribute(Tracker, android:foregroundServiceType, "location")
|
|
'
|
|
'En Starter agregar estas lineas en Process_Globals
|
|
' Public rp As RuntimePermissions
|
|
' Public FLP As FusedLocationProvider
|
|
' Private flpStarted As Boolean
|
|
'
|
|
'En Main agregar estas lineas a Activity_Resume
|
|
' Starter.rp.CheckAndRequest(Starter.rp.PERMISSION_ACCESS_FINE_LOCATION)
|
|
' Wait For B4XPage_PermissionResult (Permission As String, Result As Boolean)
|
|
' If Result Then
|
|
' StartService(Tracker)
|
|
' Log("Start Tracker")
|
|
' Else
|
|
' ToastMessageShow("No permission", True)
|
|
' End If
|
|
'
|
|
'Se necesitan las librerias FusedLocationProvider, GPS, Phone y RunTimePermissions
|
|
'
|
|
'Y en Main agregar estas dos lineas:
|
|
'#AdditionalJar: com.android.support:support-v4
|
|
'#AdditionalJar: com.google.android.gms:play-services-location
|
|
|
|
|
|
Sub Process_Globals
|
|
Private nid As Int = 51042
|
|
Private Tracking As Boolean
|
|
Private lock As PhoneWakeState
|
|
'Para FusedLocationProvider (2 lineas)
|
|
Public FLP As FusedLocationProvider
|
|
Dim actualLR As LocationRequest
|
|
Private flpStarted As Boolean
|
|
' Dim locRequest As String
|
|
Dim UUGCoords As Location 'Ultima Ubicacion Guardada
|
|
End Sub
|
|
|
|
Sub Service_Create
|
|
Service.AutomaticForegroundMode = Service.AUTOMATIC_FOREGROUND_NEVER 'we are handling it ourselves
|
|
'Para FusedLocationProvider (2 lineas)
|
|
FLP.Initialize("flp")
|
|
FLP.Connect
|
|
lock.PartialLock
|
|
StartFLP
|
|
End Sub
|
|
|
|
Sub flp_ConnectionSuccess
|
|
' Log("Connected to location provider")
|
|
'FLP.GetLastKnownLocation
|
|
End Sub
|
|
|
|
Sub flp_ConnectionFailed(ConnectionResult1 As Int)
|
|
Log("Failed to connect to location provider")
|
|
End Sub
|
|
|
|
Sub Service_Start (StartingIntent As Intent)
|
|
'Para FusedLocationProvider (1 linea)
|
|
Service.StopAutomaticForeground
|
|
Service.StartForeground(nid, CreateNotification("..."))
|
|
Track
|
|
StartServiceAt(Me, DateTime.Now + 5 * DateTime.TicksPerMinute, True)
|
|
FLP.GetLastKnownLocation.Initialize
|
|
End Sub
|
|
|
|
Public Sub Track
|
|
Log("Inicia Track - Tracking : "&Tracking)
|
|
If Not(FLP.IsInitialized) Then FLP.Initialize("flp")
|
|
If Not(FLP.IsConnected) Then FLP.Connect
|
|
If Tracking And actualLR.IsInitialized Then
|
|
' Log(actualLR.GetSmallestDisplacement)
|
|
Return 'Si ya estamos "rastreando" no hacemos nada (return)
|
|
End If
|
|
If Starter.rp.Check(Starter.rp.PERMISSION_ACCESS_FINE_LOCATION) = False Then
|
|
Log("No permission")
|
|
Return
|
|
End If
|
|
StartFLP 'Iniciamos FusedLocationProvider
|
|
Tracking = True
|
|
End Sub
|
|
|
|
Public Sub StartFLP
|
|
Log("StartFLP - flpStarted="&flpStarted)
|
|
Do While FLP.IsConnected = False
|
|
Sleep(500)
|
|
' Log("sleeping")
|
|
Loop
|
|
' If flpStarted = False Then
|
|
' Log("RequestLocationUpdates")
|
|
FLP.RequestLocationUpdates(CreateLocationRequest) 'Buscamos ubicacion
|
|
' Log("Buscamos ubicacion")
|
|
' Log(actualLR.GetSmallestDisplacement)
|
|
flpStarted = True
|
|
' End If
|
|
End Sub
|
|
|
|
Public Sub StartFLP2
|
|
Log("StartFLP2")
|
|
Private logger As Boolean = True
|
|
If logger Then Log("StartFLP2 - flpStarted="&flpStarted)
|
|
Do While FLP.IsConnected = False
|
|
Sleep(500)
|
|
If logger Then Log("kll - sleeping")
|
|
Loop
|
|
dameUltimaUbicacionConocida 'Regresamos ultima ubicacion conocida
|
|
FLP.RequestLocationUpdates(CreateLocationRequest2) 'Buscamos ubicacion 2 peticiones
|
|
If logger Then LogColor("Buscamos ubicacion (movimientoMinimo = "&actualLR.GetSmallestDisplacement&")", Colors.Magenta)
|
|
' If logger Then Log(actualLR.GetSmallestDisplacement)
|
|
End Sub
|
|
|
|
Public Sub StartFLPSmall
|
|
Log("StartFLPSmall - flpStarted="&flpStarted)
|
|
Do While FLP.IsConnected = False
|
|
Sleep(500)
|
|
Log("sleeping")
|
|
Loop
|
|
dameUltimaUbicacionConocida 'Regresamos ultima ubicacion conocida
|
|
FLP.RequestLocationUpdates(CreateLocationRequestSmallD) 'Buscamos ubicacion 2 peticiones
|
|
' Log("Buscamos ubicacion Small displacement")
|
|
' Log("GPSSmallestDisplacement = " & actualLR.GetSmallestDisplacement)
|
|
End Sub
|
|
|
|
Private Sub CreateLocationRequest As LocationRequest
|
|
Log("CreateLocationRequest")
|
|
Dim lr As LocationRequest
|
|
lr.Initialize
|
|
lr.SetInterval(2000) 'Intervalo deseado para actualizaciones de ubicacion
|
|
lr.SetFastestInterval(lr.GetInterval / 2) 'Intervalo minimo para actualizaciones de ubicacion
|
|
lr.SetSmallestDisplacement(15) 'Solo registra cambio de ubicacion si es mayor a XX mts
|
|
lr.SetPriority(lr.Priority.PRIORITY_HIGH_ACCURACY)
|
|
actualLR=lr
|
|
Return lr
|
|
End Sub
|
|
|
|
Private Sub CreateLocationRequestSmallD As LocationRequest
|
|
Log("Iniciamos CreateLocationRequestSmallD")
|
|
Dim lr As LocationRequest
|
|
lr.Initialize
|
|
lr.SetInterval(2000) 'Intervalo deseado para actualizaciones de ubicacion
|
|
lr.SetFastestInterval(lr.GetInterval / 2) 'Intervalo minimo para actualizaciones de ubicacion
|
|
lr.setNumUpdates(2) 'Solicitamos solo x actualizaciones con estos parametros
|
|
lr.SetSmallestDisplacement(3) 'Solo registra cambio de ubicacion si es mayor a XX mts
|
|
lr.SetPriority(lr.Priority.PRIORITY_HIGH_ACCURACY)
|
|
actualLR=lr
|
|
Return lr
|
|
End Sub
|
|
|
|
Private Sub CreateLocationRequest2 As LocationRequest
|
|
Private logger As Boolean = True
|
|
If logger Then Log("Iniciamos CreateLocationRequest2")
|
|
Dim lr As LocationRequest
|
|
lr.Initialize
|
|
lr.SetInterval(1000) 'Intervalo deseado para actualizaciones de ubicacion
|
|
lr.SetFastestInterval(lr.GetInterval / 2) 'Intervalo minimo para actualizaciones de ubicacion
|
|
lr.setNumUpdates(2) 'Solicitamos solo x actualizaciones con estos parametros
|
|
lr.SetSmallestDisplacement(1) 'Solo registra cambio de ubicacion si es mayor a XX mts
|
|
lr.SetPriority(lr.Priority.PRIORITY_HIGH_ACCURACY)
|
|
actualLR=lr
|
|
Return lr
|
|
End Sub
|
|
|
|
Sub dameUltimaUbicacionConocida
|
|
If FLP.GetLastKnownLocation.IsInitialized Then 'Mandamos ultima ubicacion guardada
|
|
' If Main.logger Then Log("Mandamos UUC : "&formatoFecha(FLP.GetLastKnownLocation.Time))
|
|
If Starter.Logger Then LogColor($"Mandamos UUC "${Subs.fechaKMT(FLP.GetLastKnownLocation.Time)}|Acc:$0.2{FLP.GetLastKnownLocation.Accuracy}|$0.8{FLP.GetLastKnownLocation.Latitude}|$0.8{FLP.GetLastKnownLocation.Longitude}|Spd:$0.2{FLP.GetLastKnownLocation.Speed}|"$, Colors.RGB(255,112,35))
|
|
Dim coords As String = FLP.GetLastKnownLocation.Latitude&","&FLP.GetLastKnownLocation.Longitude&","&formatoFecha(FLP.GetLastKnownLocation.Time)
|
|
' CallSubDelayed2(FirebaseMessaging,"mandamosLoc",coords)
|
|
' Subs.mandamosLoc(coords)
|
|
End If
|
|
End Sub
|
|
|
|
Public Sub StopFLP
|
|
Log("StopFLP")
|
|
If flpStarted Then
|
|
FLP.RemoveLocationUpdates 'Eliminamos todas las solicitudes de ubicacion
|
|
flpStarted = False
|
|
End If
|
|
End Sub
|
|
|
|
Sub flp_LocationChanged (Location1 As Location)
|
|
Log($"Loc changed:${Location1.Longitude},${Location1.Latitude}"$)
|
|
' ToastMessageShow("Loc changed", False)
|
|
B4XPages.MainPage.lat_gps = Location1.Latitude
|
|
B4XPages.MainPage.lon_gps = Location1.Longitude
|
|
UUGCoords = Location1
|
|
' Log("SmallestDisplacement="&actualLR.GetSmallestDisplacement)
|
|
' If DateTime.Now > LastUpdateTime + 10 * DateTime.TicksPerSecond Then
|
|
' Dim n As Notification = CreateNotification($"$2.5{Location1.Latitude} / $2.5{Location1.Longitude}"$)
|
|
' n.Notify(nid)
|
|
' LastUpdateTime = DateTime.Now
|
|
' End If
|
|
'/////// para la ultima localización FL
|
|
Dim sDate,sTime As String
|
|
DateTime.DateFormat = "MM/dd/yyyy"
|
|
sDate=DateTime.Date(DateTime.Now)
|
|
sTime=DateTime.Time(DateTime.Now)
|
|
If Not(B4XPages.MainPage.skmt.IsInitialized) Then B4XPages.MainPage.skmt.Initialize(Starter.ruta,"kmt.db", True)
|
|
Try
|
|
B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO HIST_GPS (HGDATE, HGLAT, HGLON) VALUES(?,?,?) ", Array As Object (sDate & sTime, B4XPages.MainPage.lat_gps, B4XPages.MainPage.lon_gps))
|
|
B4XPages.MainPage.skmt.ExecNonQuery("DELETE FROM HIST_GPS")
|
|
Catch
|
|
LogColor(LastException, Colors.Red)
|
|
End Try
|
|
'///////
|
|
Dim coords As String = Location1.Latitude&","&Location1.Longitude&","&formatoFecha(Location1.Time)
|
|
' Log("Loc changed : "&Location1.Latitude&","&Location1.Longitude&"|"&B4XPages.MainPage.usuario&"|")
|
|
' Log("Mandamos Ubicacion")
|
|
' Log(FirebaseMessaging.locRequest)
|
|
' Solo mandamos la ubicacion si la precision es menor a XX mts
|
|
If Location1.Accuracy < 100 Then
|
|
' CallSubDelayed2(FirebaseMessaging,"mandamosLoc",coords)
|
|
End If
|
|
|
|
CallSub2(Starter, "GPS_LocationChanged", Location1)
|
|
' CallSub2(B4XPages.MainPage.cliente, "GPS_LocationChanged", Location1)
|
|
' CallSub2(gestion, "GPS_LocationChanged", Location1)
|
|
|
|
If B4XPages.MainPage.cliente.IsInitialized And Starter.enCliente Then
|
|
CallSub2(B4XPages.GetPage("Cliente"), "GPS_LocationChanged", Location1)
|
|
End If
|
|
If B4XPages.MainPage.nuevoCliente.IsInitialized Then
|
|
CallSub2(B4XPages.GetPage("nuevocliente"), "GPS_LocationChanged", Location1)
|
|
End If
|
|
' CallSub2(nuevocliente, "GPS_LocationChanged", Location1)
|
|
End Sub
|
|
|
|
Sub CreateNotification (Body As String) As Notification
|
|
Dim notification As Notification
|
|
notification.Initialize2(notification.IMPORTANCE_LOW)
|
|
notification.Icon = "icon"
|
|
notification.SetInfo("ADM", Body, Main)
|
|
Return notification
|
|
End Sub
|
|
|
|
Sub Service_Destroy
|
|
If Tracking Then
|
|
StopFLP
|
|
End If
|
|
Tracking = False
|
|
lock.ReleasePartialLock
|
|
End Sub
|
|
|
|
Sub formatoFecha(fecha As String) As String 'Convierte una fecha al formato yyMMddHHmmss
|
|
' Log(fecha)
|
|
Dim OrigFormat As String = DateTime.DateFormat 'save orig date format
|
|
DateTime.DateFormat="yyMMddHHmmss"
|
|
Dim lastUpdate As String=DateTime.Date(fecha)
|
|
DateTime.DateFormat=OrigFormat 'return to orig date format
|
|
' Log(lastUpdate)
|
|
Return lastUpdate
|
|
End Sub
|
|
|
|
'Revisamos que el FLP (FusedLocationProvider) este inicializado y activo
|
|
Sub revisaFLP 'ignore
|
|
LogColor("**** **** Revisamos FLP **** ****", Colors.RGB(78,0,227))
|
|
Private todoBienFLP As Boolean = True
|
|
Try
|
|
If Not(FLP.IsInitialized) Then
|
|
Subs.log2DB("revisaFLP: No esta inicializado ... 'Reinicializando FLP'")
|
|
FLP.Initialize("flp")
|
|
todoBienFLP = False
|
|
End If
|
|
Catch
|
|
LogColor("If Not(Tracker.FLP.IsInitialized) --> "&LastException, Colors.Red)
|
|
End Try
|
|
Try
|
|
If FLP.IsInitialized Then
|
|
Try
|
|
If Not(FLP.IsConnected) Then
|
|
Subs.log2DB("revisaFLP: No esta conectado ... 'Reconectando FLP'")
|
|
' Tracker.FLP.Connect
|
|
StartFLP
|
|
todoBienFLP = False
|
|
End If
|
|
Catch
|
|
LogColor("If Not(Tracker.FLP.IsConnected) --> "&LastException, Colors.Red)
|
|
End Try
|
|
Try
|
|
If FLP.IsConnected And _
|
|
FLP.GetLastKnownLocation.IsInitialized And _
|
|
FLP.GetLastKnownLocation.DistanceTo(UUGCoords) > 500 Then
|
|
Subs.log2DB("revisaFLP: 'No se esta actualizando, lo reiniciamos ...'")
|
|
StartService(Me)
|
|
todoBienFLP = False
|
|
End If
|
|
Catch
|
|
LogColor("If FLP.IsConnectctd and FLP.getLKL.IsInitialized --> "&LastException, Colors.Red)
|
|
End Try
|
|
End If
|
|
If todoBienFLP Then LogColor(" +++ +++ Sin errores en FLP", Colors.Green)
|
|
Catch
|
|
LogColor("If Tracker.FLP.IsInitialized --> "&LastException, Colors.Red)
|
|
End Try
|
|
' revisar hora de lastKnownlocation y si es mayor de 10 minutos llamar StartFLP
|
|
End Sub
|
|
|
|
'Compara la UUG (Ultima Ubicacion Guardada) con FLP.LastKnowLocation y si
|
|
'cumple con los requisitos de distancia y precision la guardamos en la BD.
|
|
Sub revisaUUG 'ignore
|
|
Try
|
|
' revisaFLP
|
|
If FLP.IsInitialized And FLP.IsConnected Then
|
|
Try
|
|
If FLP.GetLastKnownLocation.IsInitialized Then
|
|
' Dim x As Location = FLP.GetLastKnownLocation
|
|
Dim daa As Int = UUGCoords.DistanceTo(FLP.GetLastKnownLocation) 'Distancia de la UUG a la actual de Tracker.FLP.GetLastKnownLocation
|
|
If Starter.Logger Then LogColor($"**** UUC "${Subs.fechaKMT(FLP.GetLastKnownLocation.Time)}|$0.2{FLP.GetLastKnownLocation.Accuracy}|$0.8{FLP.GetLastKnownLocation.Latitude}|$0.8{FLP.GetLastKnownLocation.Longitude}|$0.2{FLP.GetLastKnownLocation.Speed}|"$, Colors.RGB(255,112,35))
|
|
If daa > 40 And FLP.GetLastKnownLocation.Accuracy < 35 Then 'Si la distancia de la ubicacion anterior es mayor de XX y la precision es menor de XX, la guardamos ...
|
|
B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO RUTA_GPS(fecha, lat, lon) VALUES (?,?,?)", Array As Object (Subs.fechaKMT(FLP.GetLastKnownLocation.Time),FLP.GetLastKnownLocation.Latitude,FLP.GetLastKnownLocation.Longitude))
|
|
If Starter.Logger Then Log("++++ Distancia a anterior="&daa&"|"&"Precision="&FLP.GetLastKnownLocation.Accuracy)
|
|
End If
|
|
UUGCoords = FLP.GetLastKnownLocation
|
|
End If
|
|
Catch
|
|
LogColor("FLP.GetLastKnownLocation.IsInitialized --> "&LastException, Colors.Red)
|
|
End Try
|
|
Else
|
|
Log("StartFLP")
|
|
StartFLP
|
|
End If
|
|
Catch
|
|
LogColor("If FLP.IsInitialized --> "&LastException, Colors.Red)
|
|
End Try
|
|
End Sub |