NET8 MAUI中Plugin.LocalNotification重复通知失效及Google Play审核问题
问题解答
一、每日重复通知仅触发一次的解决方法
你遇到的重复通知只触发一次的问题,主要源于初始通知时间设置不合理或Android系统限制,可按以下步骤修复:
修正通知时间初始化逻辑
若当前时间已过8点,你代码中生成的notifyDateTime会是当天已过期的8点,插件只会触发一次过期通知,后续重复调度不会生效。需调整为:如果当前时间晚于目标时间,自动将通知时间设为次日的8点:INotificationService _notificationService; var targetHour = 8; var notifyDateTime = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, targetHour, 0, 0); // 当前时间已过目标时间时,设置为次日同一时间 if (notifyDateTime <= DateTime.Now) { notifyDateTime = notifyDateTime.AddDays(1); } var notification = new NotificationRequest { NotificationId = 100, Title = AppResources.NotificationsTitle, Description = AppResources.NotificationDescription, CategoryType = NotificationCategoryType.Status, Schedule = { NotifyTime = notifyDateTime, RepeatType = NotificationRepeat.Daily } }; await _notificationService.Show(notification);关闭Android电池优化限制
Android的Doze模式和应用电池优化会阻止后台调度任务运行,导致重复通知失效。需引导用户在系统设置中为你的应用关闭电池优化:- 路径:设置 > 电池 > 电池优化 > 找到你的应用 > 选择“不优化”
无需每次触发后重新发送通知
配置正确的情况下,Plugin.LocalNotification的RepeatType.Daily会自动重复触发,无需手动重新发送。如果调整时间后仍失效,建议检查插件版本是否为最新,排查是否存在已知bug。
二、Google Play权限被拒的解决方法
SCHEDULE_EXACT_ALARM和USE_EXACT_ALARM权限仅允许日历、闹钟、日程类应用使用,普通应用申请会被Google Play拒绝,需按以下处理:
移除敏感权限
在AndroidManifest.xml中删除以下两行权限声明:<uses-permission android:name="android.permission.SCHEDULE_EXACT_ALARM" /> <uses-permission android:name="android.permission.USE_EXACT_ALARM" />改用非精确重复调度
若不需要精确到秒的通知触发,插件的RepeatType.Daily在移除精确权限后,会自动使用Android的非精确闹钟调度,满足普通应用的重复通知需求。备选方案:手动调度重复通知
如果插件默认仍依赖精确权限,可改为在通知触发后手动调度下一次通知:- 注册通知接收事件,当通知被触发时,重新计算次日的通知时间并发送新的通知请求:
NotificationCenter.Current.NotificationReceived += (s, e) => { if (e.Request.NotificationId == 100) { // 重新调度次日的通知 var nextNotifyTime = DateTime.Now.Date.AddDays(1).AddHours(8); var newNotification = new NotificationRequest { NotificationId = 100, Title = AppResources.NotificationsTitle, Description = AppResources.NotificationDescription, CategoryType = NotificationCategoryType.Status, Schedule = { NotifyTime = nextNotifyTime } }; _notificationService.Show(newNotification); } };
- 注册通知接收事件,当通知被触发时,重新计算次日的通知时间并发送新的通知请求:
内容的提问来源于stack exchange,提问作者Enrico
相关产品推荐
相关产品推荐

