You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NET8 MAUI中Plugin.LocalNotification重复通知失效及Google Play审核问题

问题解答

一、每日重复通知仅触发一次的解决方法

你遇到的重复通知只触发一次的问题,主要源于初始通知时间设置不合理或Android系统限制,可按以下步骤修复:

  1. 修正通知时间初始化逻辑
    若当前时间已过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);
    
  2. 关闭Android电池优化限制
    Android的Doze模式和应用电池优化会阻止后台调度任务运行,导致重复通知失效。需引导用户在系统设置中为你的应用关闭电池优化:

    • 路径:设置 > 电池 > 电池优化 > 找到你的应用 > 选择“不优化”
  3. 无需每次触发后重新发送通知
    配置正确的情况下,Plugin.LocalNotification的RepeatType.Daily会自动重复触发,无需手动重新发送。如果调整时间后仍失效,建议检查插件版本是否为最新,排查是否存在已知bug。

二、Google Play权限被拒的解决方法

SCHEDULE_EXACT_ALARM和USE_EXACT_ALARM权限仅允许日历、闹钟、日程类应用使用,普通应用申请会被Google Play拒绝,需按以下处理:

  1. 移除敏感权限
    在AndroidManifest.xml中删除以下两行权限声明:

    <uses-permission android:name="android.permission.SCHEDULE_EXACT_ALARM" />
    <uses-permission android:name="android.permission.USE_EXACT_ALARM" />
    
  2. 改用非精确重复调度
    若不需要精确到秒的通知触发,插件的RepeatType.Daily在移除精确权限后,会自动使用Android的非精确闹钟调度,满足普通应用的重复通知需求。

  3. 备选方案:手动调度重复通知
    如果插件默认仍依赖精确权限,可改为在通知触发后手动调度下一次通知:

    • 注册通知接收事件,当通知被触发时,重新计算次日的通知时间并发送新的通知请求:
      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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 20:52:06