mirror of
https://github.com/cheveguerra/Pusher_2.0.git
synced 2026-04-17 19:37:05 +00:00
- Se agregó la base de datos y el codigo para guardar y administrar las geocercas. - Se modificó el codigo de los mensajes push recibidos, para que mande una notificación si la ubicación recibida esta dentro de una geocerca.
211 lines
6.7 KiB
QBasic
211 lines
6.7 KiB
QBasic
B4A=true
|
|
Group=Default Group
|
|
ModulesStructureVersion=1
|
|
Type=StaticCode
|
|
Version=11
|
|
@EndOfDesignText@
|
|
'Code module
|
|
'Subs in this code module will be accessible from all modules.
|
|
Sub Process_Globals
|
|
'These global variables will be declared once when the application starts.
|
|
'These variables can be accessed from all modules.
|
|
|
|
End Sub
|
|
|
|
Sub mueveCamaraMapa(mapFragment As MapFragment, lat As String, lon As String)
|
|
'Mueve el mapa a la posicion solicitada
|
|
Private gmap As GoogleMap
|
|
gmap = mapFragment.GetMap
|
|
Dim aa As CameraPosition
|
|
aa.Initialize(lat,lon,15)
|
|
gmap.AnimateCamera(aa)
|
|
End Sub
|
|
|
|
Sub CreateNotification (Body As String) As Notification 'ignore
|
|
Dim notification As Notification
|
|
notification.Initialize2(notification.IMPORTANCE_LOW)
|
|
notification.Icon = "icon"
|
|
notification.SetInfo("Tracking location", Body, Main)
|
|
Return notification
|
|
End Sub
|
|
|
|
Sub removeFomList(myList As List, theItem As String) 'ignore
|
|
Dim x As Int = 0
|
|
Dim myObject As List
|
|
Do While x < myList.Size
|
|
myObject = myList.get(x)
|
|
If myObject.Get(x) = theItem Then
|
|
myList.removeAt(x)
|
|
Else
|
|
x = x + 1
|
|
End If
|
|
Loop
|
|
End Sub
|
|
|
|
Sub creaMarcador(mapFragment As MapFragment, lat As String, lon As String, devModel As String, timemarker As Double) 'ignore
|
|
' Private gmap As GoogleMap
|
|
' gmap = mapFragment.GetMap
|
|
' Dim Marker1 As Marker
|
|
' Marker1 = gmap.AddMarker(lat, lon, title)
|
|
' Marker1.Title = devModel
|
|
'
|
|
' Dim horaFecha As String = timemarker
|
|
' Dim hms As String = horaFecha.SubString(6) 'Tomamos solo la parte de la hora
|
|
'' Log("hms="&hms)
|
|
' Dim horasMinsSegs As String = hms.SubString2(0,2)&":"&hms.SubString2(2,4)&":"&hms.SubString(4)
|
|
'' Log(horasMinsSegs)
|
|
' If Main.wifi <> "" And Main.wifi <> Null Then
|
|
' Main.wifi = $"Wifi: ${Main.wifi&CRLF}"$
|
|
' Else
|
|
' Main.wifi = ""
|
|
' End If
|
|
' Marker1.Snippet = "Last Loc: "&horasMinsSegs&CRLF&"Monto Total: "&montoTotal&CRLF&"Bateria: "&batt&"%"
|
|
End Sub
|
|
|
|
'Convierte una fecha al formato yyMMddHHmmss
|
|
Sub fechaKMT(fecha As String) As String 'ignore
|
|
' Log(fecha)
|
|
Dim OrigFormat As String = DateTime.DateFormat 'save orig date format
|
|
DateTime.DateFormat="yyMMddHHmmss"
|
|
Dim nuevaFecha As String=DateTime.Date(fecha)
|
|
DateTime.DateFormat=OrigFormat 'return to orig date format
|
|
' Log(nuevaFecha)
|
|
Return nuevaFecha
|
|
End Sub
|
|
|
|
'Hace visible y trae al frente el panel con los parametros "Top" y "Left" dados
|
|
Sub panelVisible(panel As Panel, top As Int, left As Int) 'ignore
|
|
panel.BringToFront
|
|
panel.Visible = True
|
|
panel.Top = top
|
|
panel.Left = left
|
|
End Sub
|
|
|
|
Sub diaSemanaString(diaSemana As Int) As String 'ignore
|
|
If diaSemana = 2 Then Return "Lun"
|
|
If diaSemana = 3 Then Return "Mar"
|
|
If diaSemana = 4 Then Return "Mie"
|
|
If diaSemana = 5 Then Return "Jue"
|
|
If diaSemana = 6 Then Return "Vie"
|
|
If diaSemana = 7 Then Return "Sab"
|
|
If diaSemana = 1 Then Return "Dom"
|
|
Return ""
|
|
End Sub
|
|
|
|
'Convierte una fecha en formato YYMMDDHHMMSS a Ticks
|
|
Sub fechaKMT2Ticks(fKMT As String) As Long 'ignore
|
|
Try
|
|
If fKMT.Length = 12 Then
|
|
Private parteFecha As String = fKMT.SubString2(0,6)
|
|
Private parteHora As String = fKMT.SubString(6)
|
|
Private OrigFormat As String = DateTime.DateFormat 'save original date format
|
|
DateTime.DateFormat="yyMMdd"
|
|
DateTime.TimeFormat="HHmmss"
|
|
Private ticks As Long = DateTime.DateTimeParse(parteFecha,parteHora)
|
|
' Log(" +++ +++ pFecha:"&parteFecha&" | pHora:"&parteHora)
|
|
DateTime.DateFormat=OrigFormat 'return to original date format
|
|
Return ticks
|
|
Else
|
|
Log("Formato de fecha incorrecto, debe de ser 'yyMMddHHmmss', no '"&fKMT&"' largo="&fKMT.Length)
|
|
Return 0
|
|
End If
|
|
Catch
|
|
Log(LastException)
|
|
LogColor($"Fecha dada: ${fKMT}, Parte Fecha: ${parteFecha}, Parte Hora: ${parteHora}"$, Colors.Red)
|
|
Return 0
|
|
End Try
|
|
End Sub
|
|
|
|
Sub SetDateFormat(Language As String, Country As String, format As String)
|
|
#if B4A or B4J
|
|
Dim locale As JavaObject
|
|
locale.InitializeNewInstance("java.util.Locale", Array(Language, Country))
|
|
Dim DateFormat As JavaObject
|
|
DateFormat.InitializeNewInstance("java.text.SimpleDateFormat", Array(format, locale))
|
|
Dim r As Reflector
|
|
r.Target = r.RunStaticMethod("anywheresoftware.b4a.keywords.DateTime", "getInst", Null, Null)
|
|
r.SetField2("dateFormat", DateFormat)
|
|
#else if B4i
|
|
Dim locale As NativeObject
|
|
locale = locale.Initialize("NSLocale").RunMethod("alloc", Null).RunMethod("initWithLocaleIdentifier:", Array(Language & "_" & Country))
|
|
DateTime.As(NativeObject).GetField("dateFormat").SetField("locale", locale)
|
|
DateTime.DateFormat = format
|
|
#End if
|
|
End Sub
|
|
|
|
'Centra un panel dentro de un elemento superior
|
|
Sub centraPanel(elemento As Panel, anchoElementoSuperior As Int) 'ignore
|
|
elemento.Left = Round(anchoElementoSuperior/2)-(elemento.Width/2)
|
|
End Sub
|
|
|
|
'Inicializa la BD con "kmt.db" en File.DirInternal, si el archivo no existe, lo copia desde File.DirAssets.
|
|
'Dispara el evento "dbOk" cuando termina.
|
|
Sub dbInit As SQL
|
|
Private db As SQL
|
|
' If File.Exists(File.DirInternal, "push.db") = False Then File.Copy(File.DirAssets, "push.db", File.DirInternal, "kmt.db")
|
|
db.Initialize(File.DirInternal,"push.db", True)
|
|
db.ExecNonQuery("CREATE TABLE IF NOT EXISTS geocercas (nombre TEXT, lat TEXT, lon TEXT)")
|
|
Return db
|
|
End Sub
|
|
|
|
'Genera una notificacion con importancia alta
|
|
Sub notiHigh(title As String, body As String, id As String, activity As Object) 'ignore
|
|
activity = Main
|
|
Private notif As Notification
|
|
notif.Initialize2(notif.IMPORTANCE_HIGH)
|
|
notif.Icon = "icon"
|
|
notif.Vibrate = False
|
|
notif.Sound = False
|
|
notif.AutoCancel = True
|
|
' If logger Then Log("notiHigh: "&title)
|
|
notif.SetInfo(title, body, activity)
|
|
' Log("notiHigh SetInfo")
|
|
notif.Notify(id)
|
|
End Sub
|
|
|
|
'Geo-Zone Determination (Point in Polygon)
|
|
'Use this to determine If a vehicle is within a defined zone made of 5 or more lat/lon coordinates.
|
|
'Point 1 Is also Point 5 (first point And last point are same value).
|
|
'You can add the points clockwise or counterclockwise.
|
|
Sub FindInZone( polx As List, poly As List, x As Double, y As Double) As Boolean 'ignore
|
|
' polx = list of lats for polygon
|
|
' poly = list of lons for polygon
|
|
' y = lon to test
|
|
' x = lat to test
|
|
Dim x1, y1, x2, y2, D As Double
|
|
Dim i, ni As Int
|
|
ni = 0
|
|
x1 = polx.Get(0)
|
|
y1 = poly.Get(0)
|
|
For i = 0 To polx.Size -1
|
|
If i < polx.Size Then
|
|
x2 = polx.Get(i)
|
|
y2 = poly.Get(i)
|
|
Else
|
|
x2 = polx.Get(0) ' checks the last line
|
|
y2 = poly.Get(0)
|
|
End If
|
|
If y >= Min(y1, y2) Then
|
|
If y <= Max(y1, y2) Then
|
|
If x <= Max(x1, x2) Then
|
|
If (x = x1 And y = y1) Or (x = x1 And x = x2) Then ' checks vertices and vertical lines
|
|
Return True
|
|
End If
|
|
If y1 <> y2 Then
|
|
D = (y - y1) * (x2 - x1) / (y2 - y1) + x1
|
|
If x1 = x2 Or x <= D Then
|
|
ni = ni + 1
|
|
End If
|
|
End If
|
|
End If
|
|
End If
|
|
End If
|
|
x1 = x2
|
|
y1 = y2
|
|
Next
|
|
If ni Mod 2 = 0 Then
|
|
Return False
|
|
Else
|
|
Return True
|
|
End If
|
|
End Sub |