From bc66ad5dbd83182fd4dde2f7cd07b5408269e067 Mon Sep 17 00:00:00 2001 From: Jose Alberto Guerra Ugalde Date: Wed, 20 Dec 2023 21:25:24 -0600 Subject: [PATCH] 20/12/23 - Se cambio rootExternal a Internal --- B4A/C_Cheklist.bas | 112 +++++++++++++++++------------------ B4A/C_Clientes.bas | 14 +++-- B4A/C_Foto.bas | 2 +- B4A/Mariana_Reparto.b4a.meta | 8 +-- B4A/Subs.bas | 12 ++-- B4A/Tracker.bas | 2 +- B4A/foto.bas | 2 +- B4XMainPage.bas | 12 ++-- 8 files changed, 81 insertions(+), 83 deletions(-) diff --git a/B4A/C_Cheklist.bas b/B4A/C_Cheklist.bas index 3cbadf9..cdf0cb9 100644 --- a/B4A/C_Cheklist.bas +++ b/B4A/C_Cheklist.bas @@ -146,7 +146,6 @@ End Sub Private Sub B4XPage_Appear MES1.Initialize(Me, "MES1") - ' get the device SDK version Dim SdkVersion As Int = device.SdkVersion @@ -174,8 +173,6 @@ Private Sub B4XPage_Appear c.Position = 0 l_placa.Text = c.GetString("PLACA") c.Close - - End Sub Private Sub InitializeCamera2 @@ -186,23 +183,23 @@ Private Sub InitializeCamera2 frontCamera = camEx.Front Log("inicializamos Camara") Else - ToastMessageShow("No permission!!!", True) - End If - Starter.rp.CheckAndRequest(Starter.rp.PERMISSION_WRITE_EXTERNAL_STORAGE) - Wait For B4XPage_PermissionResult (Permission As String, Result As Boolean) - If Result Then - Log("conpermisos para escritura") - Else - ToastMessageShow("No permission!!!", True) - End If - - Starter.rp.CheckAndRequest(Starter.rp.PERMISSION_READ_EXTERNAL_STORAGE) - Wait For B4XPage_PermissionResult (Permission As String, Result As Boolean) - If Result Then - Log("conpermisos para escritura") - Else - ToastMessageShow("No permission!!!", True) + ToastMessageShow("Sin permisos de camara!", True) End If +' Starter.rp.CheckAndRequest(Starter.rp.PERMISSION_WRITE_EXTERNAL_STORAGE) +' Wait For B4XPage_PermissionResult (Permission As String, Result As Boolean) +' If Result Then +' Log("Con permisos para escritura") +' Else +' ToastMessageShow("Sin permisos de escritura!", True) +' End If +' +' Starter.rp.CheckAndRequest(Starter.rp.PERMISSION_READ_EXTERNAL_STORAGE) +' Wait For B4XPage_PermissionResult (Permission As String, Result As Boolean) +' If Result Then +' Log("con permisos para escritura") +' Else +' ToastMessageShow("Sin permisos de lectura!!", True) +' End If End Sub Sub Camera1_Ready (Success As Boolean) @@ -248,7 +245,7 @@ Sub Camera1_PictureTaken (Data()As Byte) Log("tome foto") Dim filename As String = fototomada - Dim Dirp As String = File.DirRootExternal + Dim Dirp As String = File.DirInternal Dim Dir As String Dim Dir2 As String Try @@ -281,44 +278,43 @@ Sub Camera1_PictureTaken (Data()As Byte) Log(nombrefoto3) If nombrefoto <> "0" Then - Dim img As B4XBitmap = xui.LoadBitmapResize(File.DirRootExternal & Dir, filename, 450, 600, True) - Dim out As OutputStream = File.OpenOutput(File.DirRootExternal & Dir & Dir2, filename, True) + Dim img As B4XBitmap = xui.LoadBitmapResize(File.DirInternal & Dir, filename, 450, 600, True) + Dim out As OutputStream = File.OpenOutput(File.DirInternal & Dir & Dir2, filename, True) img.WriteToStream(out, 100, "PNG") -' foto1 = File.ReadBytes(File.DirRootExternal & Dir & Dir2, nombrefoto) +' foto1 = File.ReadBytes(File.DirInternal & Dir & Dir2, nombrefoto) out.Close - ImageView1.Bitmap = LoadBitmap(File.DirRootExternal & Dir & Dir2,nombrefoto) - + ImageView1.Bitmap = LoadBitmap(File.DirInternal & Dir & Dir2,nombrefoto) End If If nombrefoto1 <> "0" Then - Dim img As B4XBitmap = xui.LoadBitmapResize(File.DirRootExternal & Dir, filename, 450, 600, True) - Dim out As OutputStream = File.OpenOutput(File.DirRootExternal & Dir & Dir2, filename, False) + Dim img As B4XBitmap = xui.LoadBitmapResize(File.DirInternal & Dir, filename, 450, 600, True) + Dim out As OutputStream = File.OpenOutput(File.DirInternal & Dir & Dir2, filename, False) img.WriteToStream(out, 100, "PNG") -' foto2 = File.ReadBytes(File.DirRootExternal & Dir & Dir2, nombrefoto1) +' foto2 = File.ReadBytes(File.DirInternal & Dir & Dir2, nombrefoto1) out.Close - ImageView2.Bitmap = LoadBitmap(File.DirRootExternal & Dir& Dir2,nombrefoto1) + ImageView2.Bitmap = LoadBitmap(File.DirInternal & Dir& Dir2,nombrefoto1) End If If nombrefoto2 <> "0" Then - Dim img As B4XBitmap = xui.LoadBitmapResize(File.DirRootExternal & Dir, filename, 450, 600, True) - Dim out As OutputStream = File.OpenOutput(File.DirRootExternal & Dir & Dir2, filename, False) + Dim img As B4XBitmap = xui.LoadBitmapResize(File.DirInternal & Dir, filename, 450, 600, True) + Dim out As OutputStream = File.OpenOutput(File.DirInternal & Dir & Dir2, filename, False) img.WriteToStream(out, 100, "PNG") -' foto3 = File.ReadBytes(File.DirRootExternal & Dir & Dir2, nombrefoto2) +' foto3 = File.ReadBytes(File.DirInternal & Dir & Dir2, nombrefoto2) out.Close - ImageView3.Bitmap = LoadBitmap(File.DirRootExternal & Dir& Dir2,nombrefoto2) + ImageView3.Bitmap = LoadBitmap(File.DirInternal & Dir& Dir2,nombrefoto2) End If If nombrefoto3 <> "0" Then - Dim img As B4XBitmap = xui.LoadBitmapResize(File.DirRootExternal & Dir, filename, 450, 600, True) - Dim out As OutputStream = File.OpenOutput(File.DirRootExternal & Dir & Dir2, filename, False) + Dim img As B4XBitmap = xui.LoadBitmapResize(File.DirInternal & Dir, filename, 450, 600, True) + Dim out As OutputStream = File.OpenOutput(File.DirInternal & Dir & Dir2, filename, False) img.WriteToStream(out, 100, "PNG") -' foto4 = File.ReadBytes(File.DirRootExternal & Dir & Dir2, nombrefoto3) +' foto4 = File.ReadBytes(File.DirInternal & Dir & Dir2, nombrefoto3) out.Close - ImageView4.Bitmap = LoadBitmap(File.DirRootExternal & Dir & Dir2,nombrefoto3) + ImageView4.Bitmap = LoadBitmap(File.DirInternal & Dir & Dir2,nombrefoto3) End If StopCamera2 @@ -548,7 +544,7 @@ End Sub Private Sub b_guardar_Click - Dim Dirp As String = File.DirRootExternal + Dim Dirp As String = File.DirInternal Dim Dir As String Dim Dir2 As String Try @@ -599,7 +595,7 @@ Private Sub b_guardar_Click If et_liquidos.Text <> "" And (rb_docno15.Checked Or rb_docno16.Checked Or rb_docno17.Checked Or rb_docno18.Checked Or rb_docno19.Checked) Or et_liquidos.Text = "" And (rb_docsi15.Checked And rb_docsi16.Checked And rb_docsi17.Checked And rb_docsi18.Checked And rb_docsi19.Checked) Then If nombrefoto <> "0" And nombrefoto1 <> "0" And nombrefoto2 <> "0" And nombrefoto3 <> "0" Then Starter.skmt.ExecNonQuery("DELETE FROM CHECKLIST") - Starter.skmt.ExecNonQuery2("INSERT INTO CHECKLIST(USUARIO, PLACA, FECHA_CAPTURA, TARJETA_CIRCULACION, POLIZA_SEGURO, LICENCIA_CONDUCIR, LIMPIA_EXTERNA, LIMPIA_INTERNA, TRIANGULO, GATO, LLANTA_REFACCION, CARROCERIA_BUENESTADO, CARROCERIA_MALESTADO, CARROCERIA_COMENTARIOS, LUCES_CORRECTO, LUCES_INCORRECTO, LUCES_COMENTARIOS, CONDICION_PLACAS_CORRECTO, CONDICION_PLACAS_INCORRECTO, CONDICION_PLACAS_COMENTARIOS, CONDICION_LLANTAS_DEL_DER, CONDICION_LLANTAS_DEL_IZQ, CONDICION_LLANTAS_TRASERA_DER, CONDICION_LLANTAS_TRASERA_IZQ, ACEITE, ANTICONGELANTE, FRENOS, AIRE, FUGAS, COMETARIOS_FUGAS, FOTO1, FOTO12, FOTO3, FOTO4) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)",Array As Object(B4XPages.MainPage.usuario,"placas",checkdate&" "&checktime,p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,et_carroceria.Text,p11,p12,et_luces.Text,p13,p14,et_placas.Text,itemselect1,itemselect2,itemselect3,itemselect4,p15,p16,p17,p18,p19,et_liquidos.Text,File.ReadBytes(File.DirRootExternal & Dir & Dir2, nombrefoto),File.ReadBytes(File.DirRootExternal & Dir & Dir2, nombrefoto1),File.ReadBytes(File.DirRootExternal & Dir & Dir2, nombrefoto2),File.ReadBytes(File.DirRootExternal & Dir & Dir2, nombrefoto3))) + Starter.skmt.ExecNonQuery2("INSERT INTO CHECKLIST(USUARIO, PLACA, FECHA_CAPTURA, TARJETA_CIRCULACION, POLIZA_SEGURO, LICENCIA_CONDUCIR, LIMPIA_EXTERNA, LIMPIA_INTERNA, TRIANGULO, GATO, LLANTA_REFACCION, CARROCERIA_BUENESTADO, CARROCERIA_MALESTADO, CARROCERIA_COMENTARIOS, LUCES_CORRECTO, LUCES_INCORRECTO, LUCES_COMENTARIOS, CONDICION_PLACAS_CORRECTO, CONDICION_PLACAS_INCORRECTO, CONDICION_PLACAS_COMENTARIOS, CONDICION_LLANTAS_DEL_DER, CONDICION_LLANTAS_DEL_IZQ, CONDICION_LLANTAS_TRASERA_DER, CONDICION_LLANTAS_TRASERA_IZQ, ACEITE, ANTICONGELANTE, FRENOS, AIRE, FUGAS, COMETARIOS_FUGAS, FOTO1, FOTO12, FOTO3, FOTO4) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)",Array As Object(B4XPages.MainPage.usuario,"placas",checkdate&" "&checktime,p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,et_carroceria.Text,p11,p12,et_luces.Text,p13,p14,et_placas.Text,itemselect1,itemselect2,itemselect3,itemselect4,p15,p16,p17,p18,p19,et_liquidos.Text,File.ReadBytes(File.DirInternal & Dir & Dir2, nombrefoto),File.ReadBytes(File.DirInternal & Dir & Dir2, nombrefoto1),File.ReadBytes(File.DirInternal & Dir & Dir2, nombrefoto2),File.ReadBytes(File.DirInternal & Dir & Dir2, nombrefoto3))) mandaPendientes @@ -611,70 +607,70 @@ Private Sub b_guardar_Click MsgboxAsync("Especifica Fugas o detllaes en los liquidos","Atención") End If Else - MsgboxAsync("Seleeciona una opción en Niveles de Liquidos y aire de Fugas","Atención") + MsgboxAsync("Seleciona una opción en Niveles de Liquidos y aire de Fugas","Atención") End If Else - MsgboxAsync("Seleeciona una opción en Niveles de Liquidos y aire de Aire","Atención") + MsgboxAsync("Seleciona una opción en Niveles de Liquidos y aire de Aire","Atención") End If Else - MsgboxAsync("Seleeciona una opción en Niveles de Liquidos y aire de Frenos","Atención") + MsgboxAsync("Seleciona una opción en Niveles de Liquidos y aire de Frenos","Atención") End If Else - MsgboxAsync("Seleeciona una opción en Niveles de Liquidos y aire de Anticongelante","Atención") + MsgboxAsync("Seleciona una opción en Niveles de Liquidos y aire de Anticongelante","Atención") End If Else - MsgboxAsync("Seleeciona una opción en Niveles de Liquidos y aire de Aceite","Atención") + MsgboxAsync("Seleciona una opción en Niveles de Liquidos y aire de Aceite","Atención") End If Else MsgboxAsync("Especifica daños en las condiciones de placas","Atención") End If Else - MsgboxAsync("Seleeciona una opción en Conciciones de placas de Incorrecto","Atención") + MsgboxAsync("Seleciona una opción en Conciciones de placas de Incorrecto","Atención") End If Else - MsgboxAsync("Seleeciona una opción en Conciciones de placas de Correcto","Atención") + MsgboxAsync("Seleciona una opción en Conciciones de placas de Correcto","Atención") End If Else MsgboxAsync("Especifica daños en las luces","Atención") End If Else - MsgboxAsync("Seleeciona una opción en Funcionamiento de luces de Incorrecto","Atención") + MsgboxAsync("Seleciona una opción en Funcionamiento de luces de Incorrecto","Atención") End If Else - MsgboxAsync("Seleeciona una opción en Funcionamiento de luces de Correcto","Atención") + MsgboxAsync("Seleciona una opción en Funcionamiento de luces de Correcto","Atención") End If Else MsgboxAsync("Especifica daños en la carrocería","Atención") End If Else - MsgboxAsync("Seleeciona una opción en Carrocería de Mal estado","Atención") + MsgboxAsync("Seleciona una opción en Carrocería de Mal estado","Atención") End If Else - MsgboxAsync("Seleeciona una opción en Carrocería de Buen estado","Atención") + MsgboxAsync("Seleciona una opción en Carrocería de Buen estado","Atención") End If Else - MsgboxAsync("Seleeciona una opción en Seguridad y refación de Llanta de refacción","Atención") + MsgboxAsync("Seleciona una opción en Seguridad y refación de Llanta de refacción","Atención") End If Else - MsgboxAsync("Seleeciona una opción en Seguridad y refación de gato","Atención") + MsgboxAsync("Seleciona una opción en Seguridad y refación de gato","Atención") End If Else - MsgboxAsync("Seleeciona una opción en Seguridad y refación de Triagulo reflectante","Atención") + MsgboxAsync("Seleciona una opción en Seguridad y refación de Triagulo reflectante","Atención") End If Else - MsgboxAsync("Seleeciona una opción en Limpieza unidad interna","Atención") + MsgboxAsync("Seleciona una opción en Limpieza unidad interna","Atención") End If Else - MsgboxAsync("Seleeciona una opción en Limpieza unidad externa","Atención") + MsgboxAsync("Seleciona una opción en Limpieza unidad externa","Atención") End If Else - MsgboxAsync("Seleeciona una opción en Documentación viegnte de Licencia de conducir","Atención") + MsgboxAsync("Seleciona una opción en Documentación viegnte de Licencia de conducir","Atención") End If Else - MsgboxAsync("Seleeciona una opción en Documentación viegnte de Póliza de seguro","Atención") + MsgboxAsync("Seleciona una opción en Documentación viegnte de Póliza de seguro","Atención") End If Else - MsgboxAsync("Seleeciona una opción en Documentación viegnte de tarjeta de circulación","Atención") + MsgboxAsync("Seleciona una opción en Documentación viegnte de tarjeta de circulación","Atención") End If End Sub diff --git a/B4A/C_Clientes.bas b/B4A/C_Clientes.bas index 1d205e7..459ee55 100644 --- a/B4A/C_Clientes.bas +++ b/B4A/C_Clientes.bas @@ -408,12 +408,14 @@ Sub traeRutaDia(aVisitar As B4XOrderedMap) Private r1, wps As Map Starter.skmt.ExecNonQuery("delete from waypoints") For Each k As Object In clientesMapaO.Keys 'Guardamos en la BD el orden de los waypoints para luego generar el listview. - r1 = clientesMapaO.Get(k) - r1.Get("codigo") -' Log(listaWayPoints.Get(r) & "|" & r1.Get("coords") & "|" & r1.Get("calle")) - wps = listaWayPoints.Get(r) - Starter.skmt.ExecNonQuery2("insert into waypoints values (?,?)", Array As Object(r1.Get("codigo"), wps.get("waypoint_index"))) - r = r + 1 + If listaWayPoints.Size > 0 Then + r1 = clientesMapaO.Get(k) + r1.Get("codigo") + Log(listaWayPoints.Get(r) & "|" & r1.Get("coords") & "|" & r1.Get("calle")) + wps = listaWayPoints.Get(r) + Starter.skmt.ExecNonQuery2("insert into waypoints values (?,?)", Array As Object(r1.Get("codigo"), wps.get("waypoint_index"))) + r = r + 1 + End If Next ListView1.Clear Sleep(100) diff --git a/B4A/C_Foto.bas b/B4A/C_Foto.bas index ac473e2..0dea1d1 100644 --- a/B4A/C_Foto.bas +++ b/B4A/C_Foto.bas @@ -81,7 +81,7 @@ End Sub Sub Camera1_PictureTaken (Data() As Byte) Dim filename As String = "1.jpg" - Dim dir As String = File.DirRootExternal + Dim dir As String = File.DirInternal camEx.SavePictureToFile(Data, dir, filename) camEx.StartPreview 'restart preview diff --git a/B4A/Mariana_Reparto.b4a.meta b/B4A/Mariana_Reparto.b4a.meta index ce503bd..09f52f4 100644 --- a/B4A/Mariana_Reparto.b4a.meta +++ b/B4A/Mariana_Reparto.b4a.meta @@ -70,7 +70,7 @@ ModuleClosedNodes16= ModuleClosedNodes17=5,6,7,8,10,12,13,14,15,16,17,19,23,24 ModuleClosedNodes18=4 ModuleClosedNodes19= -ModuleClosedNodes2= +ModuleClosedNodes2=4,6,7 ModuleClosedNodes20= ModuleClosedNodes21= ModuleClosedNodes22= @@ -80,7 +80,7 @@ ModuleClosedNodes25= ModuleClosedNodes26= ModuleClosedNodes27= ModuleClosedNodes28=45,46,47,48,49,50,53,54 -ModuleClosedNodes29=2 +ModuleClosedNodes29= ModuleClosedNodes3= ModuleClosedNodes4=3,4,5,7,8 ModuleClosedNodes5= @@ -88,6 +88,6 @@ ModuleClosedNodes6= ModuleClosedNodes7=2 ModuleClosedNodes8=1,3 ModuleClosedNodes9=13 -NavigationStack=C_Principal,connecta_Click,1215,0,C_Principal,B4XPage_CloseRequest,1203,0,C_Principal,b_tabulador_Click,1388,1,C_Principal,B_REGRESA_Click,1365,0,C_Principal,b_check_Click,1393,1,Main,Process_Globals,17,0,Starter,Process_Globals,31,0,B4XMainPage,B4XPage_Created,148,0,B4XMainPage,B4XPage_Appear,186,0,B4XMainPage,Entrar_Click,218,0 +NavigationStack=Tracker,Service_Start,68,0,B4XMainPage,Entrar_Click,201,0,B4XMainPage,B4XPage_Created,87,0,Tracker,Track,79,0,Tracker,Process_Globals,30,1,C_Cheklist,b_guardar_Click,607,0,C_Cheklist,cb_deratras_SelectedIndexChanged,540,0,C_Cheklist,InitializeCamera2,181,6,B4XMainPage,B4XPage_Appear,192,6,C_Clientes,traeRutaDia,417,4 SelectedBuild=0 -VisibleModules=2,27,16,28,1,20,18,25,7,13 +VisibleModules=2,27,16,28,29,20,18,25,7,13,5,10,23 diff --git a/B4A/Subs.bas b/B4A/Subs.bas index 399fc4f..d6c8cb3 100644 --- a/B4A/Subs.bas +++ b/B4A/Subs.bas @@ -123,7 +123,7 @@ Sub guardaInfoEnArchivo(coords As String) 'ignore DateTime.DateFormat=OrigFormat 'return to orig date format Dim ubic As String = coords&","&lastUpdate - Dim out As OutputStream = File.OpenOutput(File.DirRootExternal, "gps.txt", True) + Dim out As OutputStream = File.OpenOutput(File.DirInternal, "gps.txt", True) Dim s As String = ubic & CRLF Dim t() As Byte = s.GetBytes("UTF-8") out.WriteBytes(t, 0, t.Length) @@ -190,7 +190,7 @@ End Sub 'Borramos el archio "gps.txt" Sub borramosArchivoGPS 'ignore - Dim out As OutputStream = File.OpenOutput(File.DirRootExternal, "gps.txt", False) + Dim out As OutputStream = File.OpenOutput(File.DirInternal, "gps.txt", False) Dim s As String = "" Dim t() As Byte = s.GetBytes("UTF-8") out.WriteBytes(t, 0, t.Length) @@ -518,7 +518,7 @@ Sub copiaDB(result As Boolean) 'ignore If result Then Dim p As String If File.ExternalWritable Then - p = File.DirRootExternal + p = File.DirInternal ' Log("Externo") Else p = File.DirInternal @@ -526,20 +526,20 @@ Sub copiaDB(result As Boolean) 'ignore End If Dim theDir As String Try - File.MakeDir(File.DirRootExternal,"kmts") + File.MakeDir(File.DirInternal,"kmts") theDir = "/kmts" Catch theDir = "" End Try Try - File.Copy(File.DirInternal,"kmt.db",File.DirRootExternal&theDir,"guna_rep_kmt.db") + File.Copy(File.DirInternal,"kmt.db",File.DirInternal&theDir,"guna_rep_kmt.db") ToastMessageShow("BD copiada!", False) Catch ToastMessageShow("No se pudo hacer la copia: "&LastException, True) End Try Log("rootExternal="&p) Log("File.DirInternal="&File.DirInternal) - Log("File.DirRootExternal="&File.DirRootExternal) + Log("File.DirInternal="&File.DirInternal) Else ToastMessageShow("Sin permisos", False) End If diff --git a/B4A/Tracker.bas b/B4A/Tracker.bas index 044ee98..f50b198 100644 --- a/B4A/Tracker.bas +++ b/B4A/Tracker.bas @@ -34,7 +34,7 @@ Version=10.2 Sub Process_Globals Private nid As Int = 1 - Private Tracking As Boolean + dim Tracking As Boolean Private lock As PhoneWakeState 'Para FusedLocationProvider (2 lineas) Public FLP As FusedLocationProvider diff --git a/B4A/foto.bas b/B4A/foto.bas index c99af86..ffcbe29 100644 --- a/B4A/foto.bas +++ b/B4A/foto.bas @@ -87,7 +87,7 @@ End Sub Sub Camera1_PictureTaken (Data() As Byte) Dim filename As String = "1.jpg" - Dim dir As String = File.DirRootExternal + Dim dir As String = File.DirInternal camEx.SavePictureToFile(Data, dir, filename) camEx.StartPreview 'restart preview diff --git a/B4XMainPage.bas b/B4XMainPage.bas index 1380749..5307c58 100644 --- a/B4XMainPage.bas +++ b/B4XMainPage.bas @@ -181,7 +181,7 @@ Sub B4XPage_Appear ' LogColor("Start Tracker1", Colors.red) Wait For B4XPage_PermissionResult (Permission As String, Result As Boolean) If Result Then - StartService(Tracker) + If Not(Tracker.Tracking) Then StartService(Tracker) ' LogColor("Start Tracker", Colors.red) Else ToastMessageShow("No permission", True) @@ -196,11 +196,11 @@ Sub B4XPage_Appear usuario = c.GetString("USUARIO") End If c.Close - Starter.rp.CheckAndRequest(Starter.rp.PERMISSION_WRITE_EXTERNAL_STORAGE) - Wait For B4XPage_PermissionResult (Permission As String, Result As Boolean) - If Result Then - Log("Con permisos de escritura externa") - End If +' Starter.rp.CheckAndRequest(Starter.rp.PERMISSION_WRITE_EXTERNAL_STORAGE) +' Wait For B4XPage_PermissionResult (Permission As String, Result As Boolean) +' If Result Then +' Log("Con permisos de escritura externa") +' End If End Sub 'You can see the list of page related events in the B4XPagesManager object. The event name is B4XPage.