Manifest::
AddManifestText(
<uses-sdk android:minSdkVersion="21" android:targetSdkVersion="29"/>
<supports-screens android:largeScreens="true"
android:normalScreens="true"
android:smallScreens="true"
android:anyDensity="true"/>)
SetApplicationAttribute(android:icon, "@drawable/icon")
SetApplicationAttribute(android:label, "$LABEL$")
CreateResourceFromFile(Macro, Themes.LightTheme)
AddManifestText(
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
<uses-permission android:name="android.permission.SCHEDULE_EXACT_ALARM" />
)
SetServiceAttribute(AlarmReceiver, android:enabled, true)
SetServiceAttribute(AlarmReceiver, android:exported, true)
Main:
#BridgeLogger: True
#ApplicationLabel: B4A Example
#VersionCode: 1
#VersionName:
#SupportedOrientations: unspecified
#CanInstallToExternalStorage: False
Sub Process_Globals
Public alarmHour As Int = 11
Public alarmMinute As Int = 30
Private ion As Object
End Sub
Sub Globals
Private rp As RuntimePermissions
End Sub
Sub Activity_Create(FirstTime As Boolean)
If FirstTime Then
Dim p As Phone
If p.SdkVersion >= 33 Then
If rp.Check(rp.PERMISSION_POST_NOTIFICATIONS) = False Then
rp.CheckAndRequest(rp.PERMISSION_POST_NOTIFICATIONS)
Wait For Activity_PermissionResult (Permission As String, Result As Boolean)
End If
End If
SetAlarm
End If
End Sub
Sub SetAlarm
Wait For (GetScheduleExactAlarmPermission) Complete (HasPermission As Boolean)
If HasPermission Then
Dim now As Long = DateTime.Now
Dim nextTime As Long
Dim today As String = DateTime.Date(now)
Dim timeStr As String = NumberFormat(alarmHour, 2, 0) & ":" & NumberFormat(alarmMinute, 2, 0) & ":00"
nextTime = DateTime.DateTimeParse(today, timeStr)
If nextTime <= now Then
nextTime = nextTime + DateTime.TicksPerDay
End If
StartServiceAtExact(AlarmReceiver, nextTime, True)
Log("The notification is scheduled for " & DateTime.Time(nextTime))
Else
Log("No permission for precise alarms")
End If
End Sub
Private Sub GetScheduleExactAlarmPermission As ResumableSub
Dim p As Phone
If p.SdkVersion >= 31 Then
Dim am As JavaObject = GetAlarmManager
If am.RunMethod("canScheduleExactAlarms", Null).As(Boolean) = False Then
Dim in As Intent
in.Initialize("android.settings.REQUEST_SCHEDULE_EXACT_ALARM", "package:" & Application.PackageName)
StartActivityForResult(in)
Wait For ion_Event (MethodName As String, Args() As Object)
Dim resultCode As Int = Args(0)
If resultCode = -1 Then
Return True
Else
Return False
End If
End If
End If
Return True
End Sub
Private Sub GetAlarmManager As JavaObject
Dim ctxt As JavaObject
ctxt.InitializeContext
Return ctxt.RunMethod("getSystemService", Array("alarm"))
End Sub
Sub StartActivityForResult(i As Intent)
Dim jo As JavaObject = GetBA
ion = jo.CreateEvent("anywheresoftware.b4a.IOnActivityResult", "ion", Null)
jo.RunMethod("startActivityForResult", Array As Object(ion, i))
End Sub
Sub GetBA As Object
Dim jo As JavaObject = Me
Return jo.RunMethod("getBA", Null)
End Sub
AlarmService::
#Region Service Attributes
#StartAtBoot: False
#End Region
Sub Process_Globals
End Sub
Sub Service_Create
End Sub
Sub Service_Start (StartingIntent As Intent)
Dim n As Notification
n.Initialize
n.Icon = "icon"
n.SetInfo("Daily reminder", "Examination", Main)
n.AutoCancel = True
n.Sound = True
n.Vibrate = True
n.Notify(1)
StopService(Me)
End Sub
Sub Service_Destroy
End Sub
Last edited: