28/9/23 - Se agregó´codigo para guardar las geocercas y recibir mensajes push.

- 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.
This commit is contained in:
2023-09-28 03:03:05 -06:00
parent e0bb8ccf21
commit ebe76d6f87
4 changed files with 132 additions and 10 deletions

View File

@@ -45,11 +45,12 @@ Library14=json
Library15=okhttputils2
Library16=phone
Library17=randomaccessfile
Library18=runtimepermissions
Library19=xcustomlistview
Library18=reflection
Library19=runtimepermissions
Library2=byteconverter
Library20=xui
Library21=reflection
Library20=xcustomlistview
Library21=xui
Library22=sql
Library3=compressstrings
Library4=core
Library5=dateutils
@@ -65,7 +66,7 @@ Module4=MyPopup
Module5=Starter
Module6=Subs
NumberOfFiles=18
NumberOfLibraries=21
NumberOfLibraries=22
NumberOfModules=6
Version=12.5
@EndOfDesignText@
@@ -103,6 +104,7 @@ Sub Process_Globals
'Api
Private const API_KEY As String = "AAAAv1qt3Lk:APA91bECIR-pHn6ul53eYyoVlpPuOo85RO-0zcAgEXwE7vqw8DFSbBtCaCINiqWQAkBBZXxHtQMdpU6B-jHIqgFKVL196UgwHv0Gw6_IgmipfV_NiItjzlH9d2QNpGLp9y_JUKVjUEhP"
Private rp As RuntimePermissions
Dim db As SQL
Dim phn As Phone
Dim devModel As String
Dim dUbicados As Int 'Dispositivos con ubicacion
@@ -124,6 +126,7 @@ Sub Process_Globals
Private hInicio, hFinal As String
Private distanciaRecorrida As String = "0"
Private usuario As String
dim punto as LatLng
End Sub
Sub Globals
@@ -181,20 +184,25 @@ Sub Globals
Private et_gc_nombre As EditText
Private b_gc_cancelar As Button
Private b_gc_ok As Button
Private b_geocercas As Button
Private p_geocercas As Panel
Private lv_geocercas As ListView
Private b_cerrar As Button
End Sub
Sub Activity_Create(FirstTime As Boolean) 'ignore
Starter.rp.CheckAndRequest(Starter.rp.PERMISSION_WRITE_EXTERNAL_STORAGE)
' Wait For Activity_PermissionResult (Permission As String, Result As Boolean)
Dim p As String
db = Subs.dbInit
Dim p As String 'ignore
If File.ExternalWritable Then
p = File.DirRootExternal
Else
p = File.DirInternal
End If
Log("rootExternal="&p)
Log("File.DirInternal="&File.DirInternal)
Log("File.DirRootExternal="&File.DirRootExternal)
' Log("rootExternal="&p)
' Log("File.DirInternal="&File.DirInternal)
' Log("File.DirRootExternal="&File.DirRootExternal)
Activity.LoadLayout("Layout")
clientes.Initialize
@@ -222,6 +230,9 @@ Sub Activity_Create(FirstTime As Boolean) 'ignore
topInicialBuscador = p_buscador.top
s_tracker.AddAll(clientes)
cb_puntosIntermedios.Checked = True
p_geocercas.BringToFront
p_geocercas.Left = (Activity.Width / 2) - (p_geocercas.Width / 2)
' reqManager.Initialize(Me, "http://10.0.0.205:1782")
' s_hora.AddAll(Array As String("00", "01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23"))
End Sub
@@ -304,6 +315,7 @@ Sub JobDone(Job As HttpJob)
Subs.SetDateFormat("es", "MX", "MMM d")
distanciaRecorrida = 0
cont = 0
Private c As Cursor = db.ExecQuery("select * from geocercas")
For Each records() As Object In result.Rows
' Log(records(result.Columns.Get("FECHA")))
If cont = 0 Then
@@ -329,12 +341,29 @@ Sub JobDone(Job As HttpJob)
End If
End If
cont = cont + 1
coordsAnt.Latitude = estasCoords.Latitude
coordsAnt.Longitude = estasCoords.Longitude
fechaFinRutaGPS = Subs.fechaKMT2Ticks(records(result.Columns.Get("FECHA")))
DateTime.timeformat = "HH:mm"
fechaFinRutaGPS = DateTime.Date(fechaFinRutaGPS) & ", " & DateTime.Time(fechaFinRutaGPS)
Next
Private estaGC As Location
If c.RowCount > 0 Then
For i = 0 To c.RowCount - 1
c.Position = i
estaGC.Initialize
estaGC.Latitude = c.GetString("lat")
estaGC.Longitude = c.GetString("lon")
' Log(estasCoords & "|" & thisGC)
Log(estasCoords.DistanceTo(estaGC))
If estasCoords.DistanceTo(estaGC) < 300 Then
ToastMessageShow($"Dentro de ${c.GetString("nombre")}"$, False)
' Subs.notiHigh("Dentro de Geocerca", $"${usuario} esta dentro de ${c.GetString("nombre")}"$, 777, "Main")
End If
Next
End If
c.Close
ToastMessageShow("Recibimos ruta con " & reqManager.HandleJob(Job).Rows.Size & " puntos.", False)
' Log(rutaGPS)
LogColor($"Distancia recorrida: $1.1{distanciaRecorrida/1000} kms."$, Colors.Magenta)
@@ -533,6 +562,7 @@ Sub MapFragment2_LongClick(Point As LatLng)
p_addGeofence.BringToFront
p_addGeofence.Left = (Activity.Width / 2) - (p_addGeofence.Width / 2)
p_addGeofence.Visible = True
punto = Point
End Sub
Sub InfoWindowAdapter1_GetInfoContents(Marker1 As Marker) As View
@@ -681,6 +711,7 @@ Sub b_buscar_longClick
p_ruta.Height = Activity.Height
p_periodoInfo.Top = Activity.Height - p_periodoInfo.Height - 5
b_regresar.Top = Activity.Height - b_regresar.Height - 5
b_geocercas.Top = Activity.Height - b_geocercas.Height - 130
l_periodoTitulo.Top = Activity.Height - (Activity.Height - p_mapa2.Height)
l_periodo.Top = Activity.Height - (Activity.Height - p_mapa2.Height) + 10
s_rutas.Top = l_periodoTitulo.Top + l_periodoTitulo.Height
@@ -787,8 +818,48 @@ End Sub
Private Sub b_gc_ok_Click
p_addGeofence.Visible = False
db.ExecNonQuery($"insert into geocercas (nombre, lat, lon) values ('${et_gc_nombre.Text}', '${punto.Latitude}', '${punto.Longitude}')"$)
et_gc_nombre.Text = ""
End Sub
Private Sub b_gc_cancelar_Click
p_addGeofence.Visible = False
End Sub
Private Sub b_geocercas_Click
Private c As Cursor = db.ExecQuery("select * from geocercas")
Dim nombre As Label = lv_geocercas.SingleLineLayout.Label
nombre.TextColor = Colors.Black
nombre.TextSize = 14
lv_geocercas.SingleLineLayout.ItemHeight = 30dip
lv_geocercas.Clear
If c.RowCount > 1 Then
For i = 0 To c.RowCount - 1
c.Position = i
lv_geocercas.AddSingleLine($"${c.GetString("nombre")}"$)
Next
End If
c.Close
p_geocercas.BringToFront
p_geocercas.Visible = True
End Sub
Private Sub lv_geocercas_ItemClick (Position As Int, Value As Object)
ToastMessageShow("Clic largo para borrar", False)
End Sub
Private Sub lv_geocercas_ItemLongClick (Position As Int, Value As Object)
If Msgbox2($"Seguro que desea borrar la geocerca "${Value}""$, "AVISO", "Aceptar", "Cancelar", "", Null) = DialogResponse.POSITIVE Then 'ignore
db.ExecNonQuery($"delete from geocercas where nombre = '${Value}'"$)
End If
p_geocercas.Visible = False
End Sub
Private Sub p_geocercas_Click
End Sub
Private Sub b_cerrar_Click
p_geocercas.Visible = False
End Sub