- 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.
Private Sub B4XPage_Created (Root1 As B4XView)
Root = Root1
' Log(567)
Root.LoadLayout("login")
B4XPages.SetTitle(Me, "Monitor Keymon")
B4XPages.AddPage("Login", login)
@@ -145,7 +146,7 @@ Private Sub B4XPage_Created (Root1 As B4XView)
' rp.CheckAndRequest(rp.PERMISSION_READ_PHONE_STATE)
' Wait For B4XPage_PermissionResult (Permission As String, Result As Boolean) 'change to Activity_PermissionResult if non-B4XPages.
' Log(888)
S.CheckAndRequestNotificationPermission
End Sub
Sub B4XPage_Appear

View File

@@ -18,10 +18,13 @@ Sub Class_Globals
' Dim rutaHrsAtras As Int = 48
' Dim rutaInicioHoy As String = ""
Private subsLogs As Boolean = False
Dim logoKeymon As Bitmap
End Sub
'You can add more parameters here.
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
End Sub
@@ -418,7 +421,7 @@ Sub CreateNotification (Body As String) As Notification
End Sub
'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
Private notif As Notification
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)
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
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
notification.Initialize2(notification.IMPORTANCE_LOW)
' Log("notiLowReturn: "&title)
@@ -446,6 +463,22 @@ Sub notiLowReturn(title As String, Body As String, id As Int) As Notification 'i
Return notification
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
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)
@@ -500,4 +533,20 @@ Sub borraArribaDeXXXErrores(limite As Int) 'ignore
Starter.skmt.ExecNonQuery($"DELETE FROM error_log WHERE fecha NOT in (SELECT fecha FROM error_log ORDER BY fecha desc LIMIT ${limite})"$)
Starter.skmt.ExecNonQuery("vacuum;")
' 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
Library1=b4xpages
Library10=reflection
Library11=runtimepermissions
Library12=sql
Library13=xcustomlistview
Library14=xui
Library15=replyauto
Library11=replyauto
Library12=runtimepermissions
Library13=sql
Library14=xcustomlistview
Library15=xui
Library16=nb6
Library2=byteconverter
Library3=core
Library4=fusedlocationprovider
@@ -29,7 +30,7 @@ Library6=json
Library7=okhttputils2
Library8=phone
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
Module2=BatteryUtilities
Module3=C_Subs
@@ -38,14 +39,14 @@ Module5=Monitor
Module6=NotificationService
Module7=Starter
NumberOfFiles=7
NumberOfLibraries=15
NumberOfLibraries=16
NumberOfModules=7
Version=12.8
@EndOfDesignText@
#Region Project Attributes
#ApplicationLabel: Monitor Keymon
#VersionCode: 1
#VersionName: 4.12.11
#VersionName: 4.12.14
'SupportedOrientations possible values: unspecified, landscape or portrait.
#SupportedOrientations: portrait
#CanInstallToExternalStorage: False
@@ -55,7 +56,7 @@ Version=12.8
#MultiDex: True
#End Region
#Region Activity Attributes
#Region Activity Attributes
#FullScreen: False
#IncludeTitle: True
#End Region
@@ -65,8 +66,8 @@ Sub Process_Globals
End Sub
Sub Globals
Type CameraInfoAndId (CameraInfo As Object, Id As Int)
Type CameraSize (Width As Int, Height As Int)
' Type CameraInfoAndId (CameraInfo As Object, Id As Int)
' Type CameraSize (Width As Int, Height As Int)
End Sub
Sub Activity_Create(FirstTime As Boolean) 'ignore

View File

@@ -15,13 +15,13 @@ ModuleBreakpoints5=
ModuleBreakpoints6=
ModuleBreakpoints7=
ModuleClosedNodes0=
ModuleClosedNodes1=8,11,19,21,22,24
ModuleClosedNodes1=2
ModuleClosedNodes2=
ModuleClosedNodes3=
ModuleClosedNodes3=32,34
ModuleClosedNodes4=
ModuleClosedNodes5=5
ModuleClosedNodes6=
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
VisibleModules=1,7,3,5,4,6

View File

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

View File

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

View File

@@ -19,7 +19,7 @@ Sub Process_Globals
Private lock As PhoneWakeState
Dim Interval As Int
Dim s As C_Subs
Dim nid As Int = 51043
Dim nid As Int = 51045
' Dim monitorActivo As Boolean = True
Dim InternetOk As Boolean = True
Dim DBReqServerOk As Boolean = True
@@ -40,11 +40,12 @@ Sub Service_Create
logger = False
#end if
lock.PartialLock
' Log(345)
' probamosConexion
End Sub
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.StartForeground(nid, s.CreateNotification("..."))
StartServiceAt(Me, DateTime.Now + 10 * DateTime.TicksPerMinute, True)
@@ -68,7 +69,7 @@ End Sub
Sub probamosConexion
If logger Then Log("###################### "& CRLF& " probamos probamosConexion"& CRLF& " ############")
Try
' Try
If B4XPages.IsInitialized Then
B4XPages.MainPage.lv_servidores.Clear
B4XPages.MainPage.lv_dbs.Clear
@@ -120,9 +121,9 @@ Sub probamosConexion
cs.Initialize
If B4XPages.IsInitialized Then B4XPages.MainPage.l_status.Text = cs.Color(Colors.red).append("NO hay conexión a internet!!").PopAll
End If
Catch
Log(LastException)
End Try
' Catch
' Log(LastException)
' End Try
End Sub
Sub reinicializaReqManager 'ignore