Files
Nuevo_Torrado_V2/B4A/Tracker.bas
2023-09-26 18:02:41 -06:00

218 lines
7.5 KiB
QBasic

B4A=true
Group=Default Group
ModulesStructureVersion=1
Type=Service
Version=11
@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 = 1
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
' Dim trackerActividad, pushServiceActividad As String
Dim logger As Boolean = True
End Sub
Sub Service_Create
Service.AutomaticForegroundMode = Service.AUTOMATIC_FOREGROUND_NEVER 'we are handling it ourselves
UUGCoords.Initialize
logger = False
'Para FusedLocationProvider (2 lineas)
FLP.Initialize("flp")
FLP.Connect
lock.PartialLock
StartFLP
End Sub
Sub flp_ConnectionSuccess
' If logger Then Log("Connected to location provider")
'FLP.GetLastKnownLocation
End Sub
Sub flp_ConnectionFailed(ConnectionResult1 As Int)
If logger Then Log("Failed to connect to location provider")
End Sub
Sub flp_ConnectionSuspended(ConnectionResult1 As Int)
If logger Then Log("FLP conection suspended")
StartFLP
End Sub
Sub Service_Start (StartingIntent As Intent)
LogColor("Iniciando Tracker ...", Colors.Green)
Service.StopAutomaticForeground
' Service.StartForeground(51042, Subs.notiLowReturn("Kelloggs", "Activo", 51042))
StartServiceAt(Me, DateTime.Now + 10 * DateTime.TicksPerMinute, True)
Track
End Sub
Public Sub Track
Log("Inicia Track - Tracking : "&Tracking)
If Tracking 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
If logger Then Log("Sin permisos de ublicación.")
Return
End If
StartFLP 'Iniciamos FusedLocationProvider
Tracking = True
End Sub
Public Sub StartFLP
Log("StartFLP - flpStarted="&flpStarted)
Do While FLP.IsConnected = False
Sleep(500)
If logger Then Log("sleeping")
Loop
' If flpStarted = False Then
' If logger Then Log("RequestLocationUpdates")
' FLP.RequestLocationUpdates(CreateLocationRequest) 'Buscamos ubicacion
If logger Then LogColor("Buscamos ubicacion (movimientoMinimo = "&actualLR.GetSmallestDisplacement&")", Colors.Magenta)
' If logger Then Log(actualLR.GetSmallestDisplacement)
flpStarted = True
' End If
End Sub
Public Sub StartFLP2
If logger Then Log("StartFLP2 - flpStarted="&flpStarted)
Do While FLP.IsConnected = False
Sleep(500)
If logger Then Log("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 CreateLocationRequest As LocationRequest
If logger Then 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(75) '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
If logger Then Log("Iniciamos CreateLocationRequest2")
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(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 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)
Starter.latitud = Location1.Latitude
Starter.longitud = Location1.Longitude
LogColor($"Location changed lat=${Location1.Latitude}, lon=${Location1.Longitude}, Acc=${Location1.Accuracy}, SD=$1.0{actualLR.GetSmallestDisplacement}"$, Colors.green)
UUGCoords = Location1
' If logger Then Log("SmallestDisplacement="&actualLR.GetSmallestDisplacement)
' CallSub2(Starter, "GPS_LocationChanged", Location1)
' CallSub2(gestion, "GPS_LocationChanged", Location1)
' Starter.ubicacionActual.Latitude = Starter.lat_gps
' Starter.ubicacionActual.Longitude = Starter.lon_gps
' Starter.ubicacionActual.Accuracy = Location1.Accuracy
'/////// para la ultima ubicacion FL
Dim sDate,sTime As String
DateTime.DateFormat = "MM/dd/yyyy"
sDate=DateTime.Date(DateTime.Now)
sTime=DateTime.Time(DateTime.Now)
' If Starter.lat_gps <> 0 And Starter.lat_gps <> Null Then
' Try
' Starter.skmt.ExecNonQuery("DELETE FROM HIST_GPS")
' Starter.skmt.ExecNonQuery2("INSERT INTO HIST_GPS (HGDATE, HGLAT, HGLON) VALUES(?,?,?) ", Array As Object (sDate & sTime, Starter.lat_gps, Starter.lon_gps))
' Catch
' If logger Then Log("Error al borrar o insertar nuevas coordendas en HIST_GPS")
' End Try
' End If
End Sub
Sub CreateNotification (Body As String) As Notification 'ignore
Dim notification As Notification
notification.Initialize2(notification.IMPORTANCE_LOW)
notification.Icon = "icon"
notification.SetInfo("This", 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 'ignore '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