- VERSION 4.12.14

- Se actualizo la libreria ReplyAuto para que no mande mensajes de "notification_removed"
This commit is contained in:
Jose Alberto Guerra Ugalde
2024-12-16 21:25:00 -06:00
parent baa8f9bbd8
commit efb4404cea
8 changed files with 80 additions and 26 deletions

View File

@@ -82,6 +82,7 @@ End Sub
'This event will be called once, before the page becomes visible. 'This event will be called once, before the page becomes visible.
Private Sub B4XPage_Created (Root1 As B4XView) Private Sub B4XPage_Created (Root1 As B4XView)
Root = Root1 Root = Root1
' Log(567)
Root.LoadLayout("login") Root.LoadLayout("login")
B4XPages.SetTitle(Me, "Monitor Keymon") B4XPages.SetTitle(Me, "Monitor Keymon")
B4XPages.AddPage("Login", login) B4XPages.AddPage("Login", login)
@@ -145,7 +146,7 @@ Private Sub B4XPage_Created (Root1 As B4XView)
' rp.CheckAndRequest(rp.PERMISSION_READ_PHONE_STATE) ' rp.CheckAndRequest(rp.PERMISSION_READ_PHONE_STATE)
' Wait For B4XPage_PermissionResult (Permission As String, Result As Boolean) 'change to Activity_PermissionResult if non-B4XPages. ' Wait For B4XPage_PermissionResult (Permission As String, Result As Boolean) 'change to Activity_PermissionResult if non-B4XPages.
' Log(888) ' Log(888)
S.CheckAndRequestNotificationPermission
End Sub End Sub
Sub B4XPage_Appear Sub B4XPage_Appear

View File

@@ -18,10 +18,13 @@ Sub Class_Globals
' Dim rutaHrsAtras As Int = 48 ' Dim rutaHrsAtras As Int = 48
' Dim rutaInicioHoy As String = "" ' Dim rutaInicioHoy As String = ""
Private subsLogs As Boolean = False Private subsLogs As Boolean = False
Dim logoKeymon As Bitmap
End Sub End Sub
'You can add more parameters here. 'You can add more parameters here.
Public Sub Initialize As Object Public Sub Initialize As Object
' smiley = LoadBitmapResize(File.DirAssets, "smiley.png", 24dip, 24dip, False)
logoKeymon = LoadBitmapResize(File.DirAssets, "logo_keymon.png", 24dip, 24dip, False)
Return Me Return Me
End Sub End Sub
@@ -418,7 +421,7 @@ Sub CreateNotification (Body As String) As Notification
End Sub End Sub
'Genera una notificacion con importancia alta 'Genera una notificacion con importancia alta
Sub notiHigh(title As String, body As String, id As String, activity As Object) 'ignore Sub notiHigh0(title As String, body As String, id As String, activity As Object) 'ignore
activity = Main activity = Main
Private notif As Notification Private notif As Notification
notif.Initialize2(notif.IMPORTANCE_HIGH) notif.Initialize2(notif.IMPORTANCE_HIGH)
@@ -432,8 +435,22 @@ Sub notiHigh(title As String, body As String, id As String, activity As Object)
notif.Notify(id) notif.Notify(id)
End Sub 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 notification As NB6
notification.Initialize("Errores", "Errores", "HIGH").AutoCancel(True).SmallIcon(logoKeymon)
If Starter.logger Then Log("notiHigh: "&title)
notification.Build(title, body, "", Main).Notify(id)
' notif.AutoCancel = True
' If logger Then Log("notiHigh: "&title)
' notif.SetInfo(title, body, activity)
' Log("notiHigh SetInfo")
' notif.Notify(id)
End Sub
'Regresa el objeto de una notificacion con importancia baja 'Regresa el objeto de una notificacion con importancia baja
Sub notiLowReturn(title As String, Body As String, id As Int) As Notification 'ignore Sub notiLowReturn0(title As String, Body As String, id As Int) As Notification 'ignore
Private notification As Notification Private notification As Notification
notification.Initialize2(notification.IMPORTANCE_LOW) notification.Initialize2(notification.IMPORTANCE_LOW)
' Log("notiLowReturn: "&title) ' Log("notiLowReturn: "&title)
@@ -446,6 +463,22 @@ Sub notiLowReturn(title As String, Body As String, id As Int) As Notification 'i
Return notification Return notification
End Sub End Sub
'Regresa el objeto de una notificacion con importancia minima
Sub notiLowReturn(title As String, Body As String, id As Int) As NB6 'ignore
Private notification As NB6
' notification.Initialize2(notification.IMPORTANCE_MIN)
notification.Initialize("Normal", "Normal", "LOW").SmallIcon(logoKeymon)
If Starter.logger Then Log("notiLowReturn: "&title)
' notification.Icon = "icon"
' notification.Sound = False
' notification.Vibrate = False
notification.Build(title, Body, "", Main).Notify(id)
' notification.SetInfo(title, Body, Main)
' notification.n(id)
' Log("notiLowReturn SetInfo")
Return notification
End Sub
Sub ping Sub ping
Private ph As Phone Private ph As Phone
Wait For (ph.ShellAsync("ping", Array As String("-c 1","-W 5", "8.8.8.8"))) Complete (Success As Boolean, ExitValue As Int, StdOut As String, StdErr As String) Wait For (ph.ShellAsync("ping", Array As String("-c 1","-W 5", "8.8.8.8"))) Complete (Success As Boolean, ExitValue As Int, StdOut As String, StdErr As String)
@@ -501,3 +534,19 @@ Sub borraArribaDeXXXErrores(limite As Int) 'ignore
Starter.skmt.ExecNonQuery("vacuum;") Starter.skmt.ExecNonQuery("vacuum;")
' if starter.logger then Log("Borramos mas de 100 de errorLog") ' if starter.logger then Log("Borramos mas de 100 de errorLog")
End Sub End Sub
Sub CheckAndRequestNotificationPermission As ResumableSub
Dim p As Phone
If p.SdkVersion < 33 Then Return True
Dim ctxt As JavaObject
ctxt.InitializeContext
Dim targetSdkVersion As Int = ctxt.RunMethodJO("getApplicationInfo", Null).GetField("targetSdkVersion")
If targetSdkVersion < 33 Then Return True
Dim NotificationsManager As JavaObject = ctxt.RunMethod("getSystemService", Array("notification"))
Dim NotificationsEnabled As Boolean = NotificationsManager.RunMethod("areNotificationsEnabled", Null)
If NotificationsEnabled Then Return True
Dim rp As RuntimePermissions
rp.CheckAndRequest(rp.PERMISSION_POST_NOTIFICATIONS)
Wait For B4XPage_PermissionResult (Permission As String, Result As Boolean) 'change to Activity_PermissionResult if non-B4XPages.
Return Result
End Sub

BIN
B4A/Files/smiley.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.1 KiB

View File

@@ -16,11 +16,12 @@ FileGroup7=Default Group
Group=Default Group Group=Default Group
Library1=b4xpages Library1=b4xpages
Library10=reflection Library10=reflection
Library11=runtimepermissions Library11=replyauto
Library12=sql Library12=runtimepermissions
Library13=xcustomlistview Library13=sql
Library14=xui Library14=xcustomlistview
Library15=replyauto Library15=xui
Library16=nb6
Library2=byteconverter Library2=byteconverter
Library3=core Library3=core
Library4=fusedlocationprovider Library4=fusedlocationprovider
@@ -29,7 +30,7 @@ Library6=json
Library7=okhttputils2 Library7=okhttputils2
Library8=phone Library8=phone
Library9=randomaccessfile Library9=randomaccessfile
ManifestCode='This code will be applied to the manifest file during compilation.~\n~'You do not need to modify it in most cases.~\n~'See this link for for more information: https://www.b4x.com/forum/showthread.php?p=78136~\n~AddManifestText(~\n~<uses-sdk android:minSdkVersion="5" android:targetSdkVersion="33"/>~\n~<supports-screens android:largeScreens="true" ~\n~ android:normalScreens="true"~\n~ android:smallScreens="true"~\n~ android:anyDensity="true"/>)~\n~SetApplicationAttribute(android:icon, "@drawable/icon")~\n~SetApplicationAttribute(android:label, "$LABEL$")~\n~CreateResourceFromFile(Macro, Themes.LightTheme)~\n~CreateResourceFromFile(Macro, FirebaseAnalytics.GooglePlayBase)~\n~ 'End of default text.~\n~''''' CAMBIA LA CLAVE API~\n~AddApplicationText(~\n~<meta-data~\n~ android:name="com.google.android.geo.API_KEY"~\n~ android:value="AIzaSyBlBnx3O-DncOSv3oFIp-12wgujOYYcl-U"/>~\n~ <meta-data android:name="com.google.android.gms.version"~\n~ android:value="@integer/google_play_services_version" />~\n~)~\n~AddApplicationText(~\n~<uses-library~\n~ android:name="org.apache.http.legacy"~\n~ android:required="false" />~\n~)~\n~'AddManifestText(~\n~'<uses-permission~\n~' android:name="android.permission.WRITE_EXTERNAL_STORAGE"~\n~' android:maxSdkVersion="33" />~\n~')~\n~ 'End of default text.~\n~ ~\n~SetApplicationAttribute(android:usesCleartextTraffic, "true")~\n~AddManifestText(<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" android:maxSdkVersion="33" />)~\n~AddPermission(android.permission.ACCESS_BACKGROUND_LOCATION)~\n~AddManifestText(<uses-permission android:name="android.permission.READ_PHONE_STATE" android:maxSdkVersion="33" />)~\n~AddManifestText(<uses-permission android:name="android.permission.READ_PRIVILEGED_PHONE_STATE" android:maxSdkVersion="33" />) 'in order to access the device non-resettable identifiers such as IMEI and serial number.~\n~AddManifestText(<uses-feature android:name="android.hardware.telephony" android:required="false" />)~\n~'AddManifestText(<uses-feature android:name="android.hardware.camera" android:required="false" />)~\n~'AddManifestText(<uses-feature android:name="android.hardware.camera.autofocus" android:required="false" />)~\n~'AddManifestText(<uses-feature android:name="android.hardware.camera.flash" android:required="false" />)~\n~'AddPermission(android.permission.REQUEST_INSTALL_PACKAGES)~\n~AddPermission(android.permission.INTERNET)~\n~'AddPermission(android.permission.INSTALL_PACKAGES)~\n~'AddPermission(android.permission.READ_EXTERNAL_STORAGE)~\n~'AddPermission(android.permission.WRITE_EXTERNAL_STORAGE)~\n~AddPermission(android.permission.READ_PHONE_STATE)~\n~AddPermission(android.permission.WAKE_LOCK)~\n~AddPermission(android.permission.ACCESS_NETWORK_STATE)~\n~~\n~'AddPermission("android.permission.MANAGE_EXTERNAL_STORAGE")~\n~'SetApplicationAttribute(android:largeHeap, "true")~\n~~\n~AddManifestText(<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" android:maxSdkVersion="33" />)~\n~AddPermission(android.permission.INTERNET)~\n~SetApplicationAttribute(android:allowBackup, "false")~\n~AddApplicationText(~\n~<service android:name="b4a.jsaplication.com.br.ReplyAuto"~\n~ android:label="MonitorKeymon"~\n~ android:permission="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE"~\n~ android:exported="true">~\n~ <intent-filter>~\n~ <action android:name="android.service.notification.NotificationListenerService" />~\n~ </intent-filter>~\n~</service>) ManifestCode='This code will be applied to the manifest file during compilation.~\n~'You do not need to modify it in most cases.~\n~'See this link for for more information: https://www.b4x.com/forum/showthread.php?p=78136~\n~AddManifestText(~\n~<uses-sdk android:minSdkVersion="5" android:targetSdkVersion="33"/>~\n~<supports-screens android:largeScreens="true" ~\n~ android:normalScreens="true"~\n~ android:smallScreens="true"~\n~ android:anyDensity="true"/>)~\n~SetApplicationAttribute(android:icon, "@drawable/icon")~\n~SetApplicationAttribute(android:label, "$LABEL$")~\n~CreateResourceFromFile(Macro, Themes.LightTheme)~\n~CreateResourceFromFile(Macro, FirebaseAnalytics.GooglePlayBase)~\n~ 'End of default text.~\n~''''' CAMBIA LA CLAVE API~\n~'AddApplicationText(~\n~'<meta-data~\n~' android:name="com.google.android.geo.API_KEY"~\n~' android:value="AIzaSyBlBnx3O-DncOSv3oFIp-12wgujOYYcl-U"/>~\n~' <meta-data android:name="com.google.android.gms.version"~\n~' android:value="@integer/google_play_services_version" />~\n~')~\n~AddApplicationText(~\n~<uses-library~\n~ android:name="org.apache.http.legacy"~\n~ android:required="false" />~\n~)~\n~'AddManifestText(~\n~'<uses-permission~\n~' android:name="android.permission.WRITE_EXTERNAL_STORAGE"~\n~' android:maxSdkVersion="33" />~\n~')~\n~ 'End of default text.~\n~ ~\n~SetApplicationAttribute(android:usesCleartextTraffic, "true")~\n~'AddManifestText(<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" android:maxSdkVersion="33" />)~\n~'AddPermission(android.permission.ACCESS_BACKGROUND_LOCATION)~\n~AddManifestText(<uses-permission android:name="android.permission.READ_PHONE_STATE" android:maxSdkVersion="33" />)~\n~'AddManifestText(<uses-permission android:name="android.permission.READ_PRIVILEGED_PHONE_STATE" android:maxSdkVersion="33" />) 'in order to access the device non-resettable identifiers such as IMEI and serial number.~\n~AddManifestText(<uses-feature android:name="android.hardware.telephony" android:required="false" />)~\n~'AddManifestText(<uses-feature android:name="android.hardware.camera" android:required="false" />)~\n~'AddManifestText(<uses-feature android:name="android.hardware.camera.autofocus" android:required="false" />)~\n~'AddManifestText(<uses-feature android:name="android.hardware.camera.flash" android:required="false" />)~\n~'AddPermission(android.permission.REQUEST_INSTALL_PACKAGES)~\n~AddPermission(android.permission.INTERNET)~\n~'AddPermission(android.permission.INSTALL_PACKAGES)~\n~'AddPermission(android.permission.READ_EXTERNAL_STORAGE)~\n~'AddPermission(android.permission.WRITE_EXTERNAL_STORAGE)~\n~AddPermission(android.permission.READ_PHONE_STATE)~\n~AddPermission(android.permission.WAKE_LOCK)~\n~AddPermission(android.permission.ACCESS_NETWORK_STATE)~\n~~\n~'AddPermission("android.permission.MANAGE_EXTERNAL_STORAGE")~\n~'SetApplicationAttribute(android:largeHeap, "true")~\n~~\n~AddManifestText(<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" android:maxSdkVersion="33" />)~\n~AddPermission(android.permission.INTERNET)~\n~SetApplicationAttribute(android:allowBackup, "false")~\n~AddApplicationText(~\n~<service android:name="b4a.jsaplication.com.br.ReplyAuto"~\n~ android:label="MonitorKeymon"~\n~ android:permission="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE"~\n~ android:exported="true">~\n~ <intent-filter>~\n~ <action android:name="android.service.notification.NotificationListenerService" />~\n~ </intent-filter>~\n~</service>)~\n~~\n~'Las siguientes lineas son para permitor el uso del SERVICIO en android 14+ (Se puso como servicio de medios porque no hay uno de monitoreo)~\n~'AddPermission(android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK)~\n~'SetServiceAttribute(Monitor, android:foregroundServiceType, "mediaPlayback")
Module1=B4XMainPage Module1=B4XMainPage
Module2=BatteryUtilities Module2=BatteryUtilities
Module3=C_Subs Module3=C_Subs
@@ -38,14 +39,14 @@ Module5=Monitor
Module6=NotificationService Module6=NotificationService
Module7=Starter Module7=Starter
NumberOfFiles=7 NumberOfFiles=7
NumberOfLibraries=15 NumberOfLibraries=16
NumberOfModules=7 NumberOfModules=7
Version=12.8 Version=12.8
@EndOfDesignText@ @EndOfDesignText@
#Region Project Attributes #Region Project Attributes
#ApplicationLabel: Monitor Keymon #ApplicationLabel: Monitor Keymon
#VersionCode: 1 #VersionCode: 1
#VersionName: 4.12.11 #VersionName: 4.12.14
'SupportedOrientations possible values: unspecified, landscape or portrait. 'SupportedOrientations possible values: unspecified, landscape or portrait.
#SupportedOrientations: portrait #SupportedOrientations: portrait
#CanInstallToExternalStorage: False #CanInstallToExternalStorage: False
@@ -65,8 +66,8 @@ Sub Process_Globals
End Sub End Sub
Sub Globals Sub Globals
Type CameraInfoAndId (CameraInfo As Object, Id As Int) ' Type CameraInfoAndId (CameraInfo As Object, Id As Int)
Type CameraSize (Width As Int, Height As Int) ' Type CameraSize (Width As Int, Height As Int)
End Sub End Sub
Sub Activity_Create(FirstTime As Boolean) 'ignore Sub Activity_Create(FirstTime As Boolean) 'ignore

View File

@@ -15,13 +15,13 @@ ModuleBreakpoints5=
ModuleBreakpoints6= ModuleBreakpoints6=
ModuleBreakpoints7= ModuleBreakpoints7=
ModuleClosedNodes0= ModuleClosedNodes0=
ModuleClosedNodes1=8,11,19,21,22,24 ModuleClosedNodes1=2
ModuleClosedNodes2= ModuleClosedNodes2=
ModuleClosedNodes3= ModuleClosedNodes3=32,34
ModuleClosedNodes4= ModuleClosedNodes4=
ModuleClosedNodes5=5 ModuleClosedNodes5=5
ModuleClosedNodes6= ModuleClosedNodes6=
ModuleClosedNodes7= ModuleClosedNodes7=
NavigationStack=C_Subs,ping,445,1,Main,Globals,26,0,B4XMainPage,Class_Globals,66,0,Monitor,Process_Globals,19,0,Monitor,JobDone,162,4,NotificationService,Service_Create,14,0,B4XMainPage,B4XPage_Created,79,0,NotificationService,Service_Start,18,0,NotificationService,MonitorKeymon_NotificationPosted,44,0,Starter,Service_Start,60,0,Monitor,Service_Start,43,0 NavigationStack=NotificationService,Process_Globals,11,0,Starter,Service_Start,37,1,Monitor,Service_Create,36,1,NotificationService,Service_Create,13,1,NotificationService,MonitorKeymon_NotificationPosted,31,0,NotificationService,Service_Start,19,1,C_Subs,notiLowReturn,464,1,C_Subs,notiHigh,432,0,Monitor,Service_Start,40,0,B4XMainPage,B4XPage_Created,78,0
SelectedBuild=0 SelectedBuild=0
VisibleModules=1,7,3,5,4,6 VisibleModules=1,7,3,5,4,6

View File

@@ -5,7 +5,7 @@ Type=Service
Version=11 Version=11
@EndOfDesignText@ @EndOfDesignText@
#Region Service Attributes #Region Service Attributes
#StartAtBoot: False #StartAtBoot: True
#End Region #End Region
Sub Process_Globals Sub Process_Globals
@@ -17,12 +17,13 @@ Sub Process_Globals
End Sub End Sub
Sub Service_Create Sub Service_Create
' Log(963)
rp.Initialize("MonitorKeymon") rp.Initialize("MonitorKeymon")
If Starter.logger Then Log("**************** Iniciamos Monitor Keymon ***********************") If Starter.logger Then Log("**************** Iniciamos Monitor Keymon ***********************")
End Sub End Sub
Sub Service_Start (StartingIntent As Intent) Sub Service_Start (StartingIntent As Intent)
Log("Monitor - NotificationService Start") if starter.logger then Log("Monitor - NotificationService Start")
If rp.HandleIntent(StartingIntent) Then Return If rp.HandleIntent(StartingIntent) Then Return
DateTime.DateFormat = "mm" DateTime.DateFormat = "mm"
ultimaNoti = DateTime.Date(DateTime.now) ultimaNoti = DateTime.Date(DateTime.now)

View File

@@ -41,6 +41,7 @@ Sub Service_Create
End Sub End Sub
Sub Service_Start (StartingIntent As Intent) Sub Service_Start (StartingIntent As Intent)
' Log(123)
Service.StopAutomaticForeground 'Starter service can start in the foreground state in some edge cases. Service.StopAutomaticForeground 'Starter service can start in the foreground state in some edge cases.
s.Initialize s.Initialize
skmt = s.inicializaBD(File.DirInternal, "kmt.db") skmt = s.inicializaBD(File.DirInternal, "kmt.db")

View File

@@ -19,7 +19,7 @@ Sub Process_Globals
Private lock As PhoneWakeState Private lock As PhoneWakeState
Dim Interval As Int Dim Interval As Int
Dim s As C_Subs Dim s As C_Subs
Dim nid As Int = 51043 Dim nid As Int = 51045
' Dim monitorActivo As Boolean = True ' Dim monitorActivo As Boolean = True
Dim InternetOk As Boolean = True Dim InternetOk As Boolean = True
Dim DBReqServerOk As Boolean = True Dim DBReqServerOk As Boolean = True
@@ -40,11 +40,12 @@ Sub Service_Create
logger = False logger = False
#end if #end if
lock.PartialLock lock.PartialLock
' Log(345)
' probamosConexion ' probamosConexion
End Sub End Sub
Sub Service_Start (StartingIntent As Intent) Sub Service_Start (StartingIntent As Intent)
Log("Monitor Start") If Starter.logger Then Log("Monitor Start")
Service.StopAutomaticForeground 'Call this when the background task completes (if there is one) Service.StopAutomaticForeground 'Call this when the background task completes (if there is one)
Service.StartForeground(nid, s.CreateNotification("...")) Service.StartForeground(nid, s.CreateNotification("..."))
StartServiceAt(Me, DateTime.Now + 10 * DateTime.TicksPerMinute, True) StartServiceAt(Me, DateTime.Now + 10 * DateTime.TicksPerMinute, True)
@@ -68,7 +69,7 @@ End Sub
Sub probamosConexion Sub probamosConexion
If logger Then Log("###################### "& CRLF& " probamos probamosConexion"& CRLF& " ############") If logger Then Log("###################### "& CRLF& " probamos probamosConexion"& CRLF& " ############")
Try ' Try
If B4XPages.IsInitialized Then If B4XPages.IsInitialized Then
B4XPages.MainPage.lv_servidores.Clear B4XPages.MainPage.lv_servidores.Clear
B4XPages.MainPage.lv_dbs.Clear B4XPages.MainPage.lv_dbs.Clear
@@ -120,9 +121,9 @@ Sub probamosConexion
cs.Initialize cs.Initialize
If B4XPages.IsInitialized Then B4XPages.MainPage.l_status.Text = cs.Color(Colors.red).append("NO hay conexión a internet!!").PopAll If B4XPages.IsInitialized Then B4XPages.MainPage.l_status.Text = cs.Color(Colors.red).append("NO hay conexión a internet!!").PopAll
End If End If
Catch ' Catch
Log(LastException) ' Log(LastException)
End Try ' End Try
End Sub End Sub
Sub reinicializaReqManager 'ignore Sub reinicializaReqManager 'ignore