Android Question I need to create a daily notification for Android ver. 16

Sergey_New

Well-Known Member
Licensed User
Longtime User
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
The notification isn't being generated. Please help me fix the code.
 
Last edited:

DonManfred

Expert
Licensed User
Longtime User
StartServiceAtExact(AlarmReceiver, nextTime, True)
AlarmReceiver is a Service in your app?
You posted code for a AlarmService which let me think you are using a service
 
Upvote 0
Top