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 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(1) 'Intervalo deseado para actualizaciones de ubicacion lr.SetFastestInterval(lr.GetInterval / 2) 'Intervalo minimo para actualizaciones de ubicacion lr.SetSmallestDisplacement(10) '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 Public Sub 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 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 2 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 flp_LocationChanged (Location1 As Location) ' ToastMessageShow("Loc changed", False) Log($"Loc changed:${Location1.Longitude},${Location1.Latitude}"$) 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 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