@@ -605,17 +605,7 @@ internal virtual async Task<bool> ShowNow(NotificationRequest request)
605
605
606
606
return true ;
607
607
}
608
-
609
- /// <inheritdoc />
610
- public Task < bool > AreNotificationsEnabled ( )
611
- {
612
- return MyNotificationManager is null
613
- ? Task . FromResult ( false )
614
- : ! OperatingSystem . IsAndroidVersionAtLeast ( 24 )
615
- ? Task . FromResult ( true )
616
- : Task . FromResult ( MyNotificationManager . AreNotificationsEnabled ( ) ) ;
617
- }
618
-
608
+
619
609
/// <summary>
620
610
///
621
611
/// </summary>
@@ -787,41 +777,87 @@ public void RegisterCategoryList(HashSet<NotificationCategory> categoryList)
787
777
}
788
778
}
789
779
780
+ private NotificationPermission _notificationPermission = new ( ) ;
781
+
782
+ /// <inheritdoc />
783
+ public Task < bool > AreNotificationsEnabled ( NotificationPermission ? permission = null )
784
+ {
785
+ _notificationPermission = permission is not null ? permission : new NotificationPermission ( ) ;
786
+
787
+ if ( MyNotificationManager is null )
788
+ {
789
+ return Task . FromResult ( false ) ;
790
+ }
791
+
792
+ if ( ! OperatingSystem . IsAndroidVersionAtLeast ( 24 ) )
793
+ {
794
+ return Task . FromResult ( true ) ;
795
+ }
796
+
797
+ if ( ! MyNotificationManager . AreNotificationsEnabled ( ) )
798
+ {
799
+ return Task . FromResult ( false ) ;
800
+ }
801
+
802
+ if ( ! OperatingSystem . IsAndroidVersionAtLeast ( 33 ) )
803
+ {
804
+ return Task . FromResult ( true ) ;
805
+ }
806
+
807
+ if ( _notificationPermission . Android . RequestPermissionToScheduleExactAlarm )
808
+ {
809
+ var canScheduleExactAlarms = MyAlarmManager ? . CanScheduleExactAlarms ( ) ?? false ;
810
+
811
+ return Task . FromResult ( canScheduleExactAlarms ) ;
812
+ }
813
+
814
+ return Task . FromResult ( true ) ;
815
+ }
816
+
790
817
/// <inheritdoc />
791
818
public async Task < bool > RequestNotificationPermission ( NotificationPermission ? permission = null )
792
819
{
793
- permission ??= new NotificationPermission ( ) ;
820
+ _notificationPermission = permission is not null ? permission : new NotificationPermission ( ) ;
821
+
822
+ var allowed = await AreNotificationsEnabled ( _notificationPermission ) ;
823
+ if ( allowed )
824
+ {
825
+ return true ;
826
+ }
794
827
795
828
if ( ! OperatingSystem . IsAndroidVersionAtLeast ( 33 ) )
796
829
{
797
- return false ;
830
+ return true ;
798
831
}
799
832
800
- if ( ! permission . AskPermission )
833
+ if ( ! _notificationPermission . AskPermission )
801
834
{
802
835
return false ;
803
836
}
804
-
837
+
805
838
var status = await Permissions . RequestAsync < NotificationPerms > ( ) ;
806
- if ( status != PermissionStatus . Granted )
839
+ if ( status != PermissionStatus . Granted )
807
840
{
808
841
return false ;
809
842
}
810
843
811
- if ( ! permission . Android . RequestPermissionToScheduleExactAlarm )
844
+ LocalNotificationCenter . Log ( $ "Request Permission To Schedule Exact Alarm: { _notificationPermission . Android . RequestPermissionToScheduleExactAlarm } ") ;
845
+
846
+ if ( ! _notificationPermission . Android . RequestPermissionToScheduleExactAlarm )
812
847
{
813
848
return true ;
814
849
}
815
-
850
+
816
851
var canScheduleExactAlarms = MyAlarmManager ? . CanScheduleExactAlarms ( ) ?? false ;
817
852
853
+ LocalNotificationCenter . Log ( $ "Can Schedule Exact Alarms: { canScheduleExactAlarms } ") ;
854
+
818
855
if ( ! canScheduleExactAlarms )
819
856
{
820
857
var uri = Android . Net . Uri . Parse ( $ "package:{ Application . Context . PackageName } ") ;
821
858
var intent = new Intent ( Android . Provider . Settings . ActionRequestScheduleExactAlarm , uri ) ;
859
+ intent . AddFlags ( ActivityFlags . NewTask ) ;
822
860
Application . Context . StartActivity ( intent ) ;
823
-
824
- canScheduleExactAlarms = MyAlarmManager ? . CanScheduleExactAlarms ( ) ?? false ;
825
861
}
826
862
827
863
return canScheduleExactAlarms ;
0 commit comments