Dim Phone As Phone
aver=Phone.SdkVersion
For Each permission As String In Array(rp.PERMISSION_RECORD_AUDIO, rp.PERMISSION_READ_PHONE_STATE, rp.PERMISSION_CAMERA, rp.PERMISSION_ACCESS_FINE_LOCATION, rp.PERMISSION_POST_NOTIFICATIONS)
rp.CheckAndRequest( permission )
Wait For B4XPage_PermissionResult( permission As String, Result As Boolean )
If Result = False Then
ToastMessageShow( "Δεν δώσατε δικαιώματα στην εφαρμογή, άρα δεν μπορείτε να την χρησιμοποιήσετε !", True )
ExitApplication
Return
End If
Next
If aver>33 Then
Wait For (CheckAndRequestNotificationPermission) Complete (HasPermission As Boolean)
If HasPermission Then
Log("ok for notifications...")
Else
Msgbox2Async("Πρέπει να δώσετε δικαιώματα να στέλνουμε ειδοποιήσεις, για να δουλεύει σωστά η εφαρμογή... Δεν δώσατε δικαιώματα, θα χρειαστεί επανεγκατάσταση !", "Προσοχή!", "OK", "", "", Null, False)
End If
Else
If aver<24 Then
If AreNotificationsEnabled = False Then
Msgbox2Async("Πρέπει να δώσετε δικαιώματα να στέλνουμε ειδοποιήσεις, για να δουλεύει σωστά η εφαρμογή...", "Προσοχή!", "OK", "", "Με τίποτα !!!", Null, False)
Wait For Msgbox_Result (Result1 As Int)
If Result1 = DialogResponse.POSITIVE Then
Wait For (AskForEnableNotifications) Complete (nAskingStatus As Int)
If AreNotificationsEnabled = False Then ExitApplication
Else
Return
End If
End If
Else
If CheckScheduleExactAlarmsPermission = 0 Then
Msgbox2Async("Πρέπει να δώσετε δικαιώματα να στέλνουμε ειδοποιήσεις, για να δουλεύει σωστά η εφαρμογή...", "Προσοχή!", "OK", "", "Με τίποτα !!!", Null, False)
Wait For Msgbox_Result (Result1 As Int)
If Result1 = DialogResponse.POSITIVE Then
Wait For (AskForScheduleExactAlarmsPermission) Complete (rAskingStatus As Int)
If CheckScheduleExactAlarmsPermission <> 1 Then ExitApplication
Else
ExitApplication
End If
End If
End If
End If
....
'sdk 31---follow
Private Sub StartActivityForResult(i As Intent)
Dim jo As JavaObject = GetBA
ion = jo.CreateEvent("anywheresoftware.b4a.IOnActivityResult", "ion", Null)
jo.RunMethod("startActivityForResult", Array(ion, i))
End Sub
Private Sub GetBA As Object
Dim jo As JavaObject
Dim cls As String = Me
cls = cls.SubString("class ".Length)
jo.InitializeStatic(cls)
Return jo.GetField("processBA")
End Sub
Private Sub AskForScheduleExactAlarmsPermission As ResumableSub
Try
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)
Args(0) = 0 'User cancel
Args(0) = -1 'User allow
' If Args.Length > 0 Then
' Return Args(0).As(Int)
' Else
' Return -3
' End If
Return 1
Catch
'Log(LastException)
Return -1
End Try
End Sub
Private Sub CheckScheduleExactAlarmsPermission As Int
Try
If Phone.SdkVersion < 31 Then
' Μέθοδος δεν υποστηρίζεται
Return -3
End If
Dim oConText As JavaObject
Dim oAlarmManager As JavaObject
Dim IsScheduleExactAlarmsAllowed As Boolean = False
oConText.InitializeContext
oAlarmManager = oConText.RunMethod("getSystemService", Array("alarm"))
If oAlarmManager.IsInitialized Then
IsScheduleExactAlarmsAllowed = oAlarmManager.RunMethod("canScheduleExactAlarms", Null).As(Boolean)
If IsScheduleExactAlarmsAllowed Then
Return 1 ' Ναι, επιτρέπεται
Else
Return 0 ' Όχι, δεν επιτρέπεται
End If
Else
Return -2 ' AlarmManager δεν είναι διαθέσιμο
End If
Catch
'Log(LastException)
Return -1 ' Σφάλμα κατά την εκτέλεση
End Try
End Sub
Private Sub AreNotificationsEnabled As Boolean
Try
Dim nJO As JavaObject
Dim ctxt As JavaObject
ctxt.InitializeContext
nJO = nJO.InitializeStatic("android.support.v4.app.NotificationManagerCompat").RunMethod("from", Array(ctxt))
'areNotificationsEnabled method Added in API level 24
Return nJO.RunMethod("areNotificationsEnabled", Null)
Catch
Return False
End Try
End Sub
Private Sub AskForEnableNotifications As ResumableSub
Try
Dim IN As Intent
'android.settings.APP_NOTIFICATION_SETTINGS Added in API level 26
IN.Initialize("android.settings.APP_NOTIFICATION_SETTINGS", "")
IN.Flags = 268435456 'FLAG_ACTIVITY_NEW_TASK
IN.PutExtra("android.provider.extra.APP_PACKAGE", Application.PackageName)
StartActivityForResult(IN)
Wait For ion_Event (MethodName As String, Args() As Object)
Return 1
Catch
Return -1
End Try
End Sub
'Make sure that targetSdkVersion >= 33
Private Sub CheckAndRequestNotificationPermission As ResumableSub
Try
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.
Log(Permission & ": " & Result)
Return Result
Catch
Return True
End Try
End Sub