B4A=true Group=Default Group ModulesStructureVersion=1 Type=Service Version=10.5 @EndOfDesignText@ #Region Service Attributes #StartAtBoot: True #End Region '****************************************************************************** 'No olvidar agregar esta linea al editor de manifiesto: ' SetServiceAttribute(Tracker, android:foregroundServiceType, "location") ' AddPermission(android.permission.ACCESS_FINE_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 necesita la libreria 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 GPS As GPS ' Private Tracking As Boolean ' Private LastUpdateTime As Long Private lock As PhoneWakeState 'Para FusedLocationProvider (2 lineas) Public FLP As FusedLocationProvider Private flpStarted As Boolean 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") 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("...")) ' StartServiceAt(Me, DateTime.Now + 30 * DateTime.TicksPerMinute, True) ' Track 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") flpStarted = True Else FLP.RequestLocationUpdates(CreateLocationRequest2times) 'Buscamos ubicacion 2 peticiones Log("Buscamos ubicacion 2 peticiones") End If End Sub Private Sub CreateLocationRequest As LocationRequest 'Log("CreateLocationRequest") Dim lr As LocationRequest lr.Initialize lr.SetInterval(10000) lr.SetFastestInterval(lr.GetInterval / 2) lr.SetSmallestDisplacement(50) 'Solo registra cambio de ubicacion si es mayor a 50 mts lr.SetPriority(lr.Priority.PRIORITY_HIGH_ACCURACY) Return lr End Sub Private Sub CreateLocationRequest2times As LocationRequest 'Log("CreateLocationRequest") Dim lr As LocationRequest lr.Initialize lr.SetInterval(5000) lr.SetFastestInterval(lr.GetInterval / 2) lr.setNumUpdates(2) lr.SetSmallestDisplacement(5) 'Solo registra cambio de ubicacion si es mayor a 50 mts lr.SetPriority(lr.Priority.PRIORITY_HIGH_ACCURACY) Return lr End Sub Public Sub StopFLP 'Log("StopFLP") If flpStarted Then FLP.RemoveLocationUpdates flpStarted = False End If End Sub Public Sub Track 'Log("Track") If Tracking Then Return If Starter.rp.Check(Starter.rp.PERMISSION_ACCESS_FINE_LOCATION) = False Then Log("No permission") Return End If 'Para FusedLocationProvider (1 linea) StartFLP Tracking = True End Sub Sub flp_LocationChanged (Location1 As Location) ' 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 Log("loc changed") ' Dim coords As String = Location1.Latitude&","&Location1.Longitude&","&Location1.Time ' Dim mm As Map = CreateMap("Body": coords, "d": Main.devModel) ' CallSub2(Main,"ubicacionRecibida",mm) 'Cambiamos el formato de la hora ' Dim OrigFormat As String=DateTime.DateFormat 'save orig date format ' DateTime.DateFormat="MMM-dd HH:mm:ss" ' Dim lastUpdate As String=DateTime.Date(DateTime.Now) ' DateTime.DateFormat=OrigFormat 'return to orig date format 'Escribimos coordenadas y fecha a un archivo de texto ' Dim ubic As String = Location1.Latitude&","&Location1.Longitude&"|"&lastUpdate ' Dim out As OutputStream = File.OpenOutput(File.DirRootExternal, "gps.txt", True) ' Dim s As String = ubic & CRLF ' Dim t() As Byte = s.GetBytes("UTF-8") ' out.WriteBytes(t, 0, t.Length) ' out.Close Log("Loc changed : "&Location1.Latitude&","&Location1.Longitude&"|"&Location1.Accuracy) End Sub Sub Service_Destroy If Tracking Then StopFLP End If Tracking = False lock.ReleasePartialLock End Sub