HarmonyOS 日历提醒不生效?

import { reminderAgentManager } from '@kit.BackgroundTasksKit'
import { notificationManager } from '@kit.NotificationKit'
import { common } from '@kit.AbilityKit'
import { BusinessError } from '@kit.BasicServicesKit'
import { PermissionUtil } from '@hupu/utils'

export class HpCalendarReminderInfo {
  startMillis?: number
  endMillis?: number
  title?: string
  desc?: string
}

export class HpReminderManager {
  private static reminderManager?: HpReminderManager

  private constructor() {
  }

  static getInstance(): HpReminderManager {
    if (!HpReminderManager.reminderManager) {
      HpReminderManager.reminderManager = new HpReminderManager()
    }
    return HpReminderManager.reminderManager
  }

  async requestNotificationPermission(): Promise<boolean> {
    let context = getContext(this) as common.UIAbilityContext;
    return new Promise<boolean>((resolve, reject) => {
      notificationManager.isNotificationEnabled().then((data: boolean) => {
        if (!data) {
          notificationManager.requestEnableNotification(context).then(() => {
            resolve(true)
          }).catch((err: BusinessError) => {
            resolve(false)
          });
        } else {
          resolve(true)
        }
      }).catch((err: BusinessError) => {
        resolve(false)
      });
    })
  }

  async requestPublishPermission(): Promise<boolean> {
    return await PermissionUtil.requestPermissionsList(['ohos.permission.PUBLISH_AGENT_REMINDER'])
  }

  async requestPermission() {
    let notificationPermission = await this.requestNotificationPermission()
    if (notificationPermission) {
      let publishPermission = await this.requestPublishPermission()
      return publishPermission
    }
    return false
  }

  async publishCalendarReminder(infoEntity: HpCalendarReminderInfo): Promise<number> {
    let permission = await this.requestPermission()
    if (!permission) {
      return 0
    }

    let startDate = new Date(infoEntity.startMillis ?? 0)
    let endDate = new Date(infoEntity.endMillis ?? 0)
    let targetReminderAgent: reminderAgentManager.ReminderRequestCalendar = {
      reminderType: reminderAgentManager.ReminderType.REMINDER_TYPE_CALENDAR, // 提醒类型为日历类型
      dateTime: {
        // 指明提醒的目标时间
        year: startDate.getFullYear(),
        month: startDate.getMonth(),
        day: startDate.getDay(),
        hour: startDate.getHours(),
        minute: startDate.getMinutes(),
        second: startDate.getSeconds()
      },
      endDateTime: {
        // 指明提醒的目标时间
        year: endDate.getFullYear(),
        month: endDate.getMonth(),
        day: endDate.getDay(),
        hour: endDate.getHours(),
        minute: endDate.getMinutes(),
        second: endDate.getSeconds()
      },
      actionButton: [// 设置弹出的提醒通知信息上显示的按钮类型和标题
        {
          title: 'close',
          type: reminderAgentManager.ActionButtonType.ACTION_BUTTON_TYPE_CLOSE
        },
        {
          title: 'snooze',
          type: reminderAgentManager.ActionButtonType.ACTION_BUTTON_TYPE_SNOOZE
        },
      ],
      wantAgent: {
        // 点击提醒通知后跳转的目标UIAbility信息
        pkgName: 'com.hupu.heroes',
        abilityName: 'EntryAbility'
      },
      maxScreenWantAgent: {
        // 全屏显示提醒到达时自动拉起的目标UIAbility信息
        pkgName: 'com.hupu.heroes',
        abilityName: 'EntryAbility'
      },
      ringDuration: 5, // 指明响铃时长(单位:秒)
      snoozeTimes: 2, // 指明延迟提醒次数
      timeInterval: 5, // 执行延迟提醒间隔(单位:秒)
      title: infoEntity.title, // 指明提醒标题
      content: infoEntity.desc, // 指明提醒内容
      expiredContent: 'this reminder has expired', // 指明提醒过期后需要显示的内容
      snoozeContent: 'remind later', // 指明延迟提醒时需要显示的内容
      notificationId: 99, // 指明提醒使用的通知的ID号,相同ID号的提醒会覆盖
      slotType: notificationManager.SlotType.SOCIAL_COMMUNICATION // 指明提醒的Slot类型
    }

    return new Promise<number>((resolve, reject) => {
      reminderAgentManager.publishReminder(targetReminderAgent).then((result) => {
        resolve(result)
      }).catch(() => {
        resolve(0)
      })
    })
  }

  async cancelReminder(reminderId?: number) {
    return new Promise<void>((resolve, reject) => {
      reminderAgentManager.cancelReminder(reminderId).then((result) => {
        resolve(result)
      }).catch(() => {
        resolve()
      })
    })
  }
}
//申请权限如下:
{
  "name": "ohos.permission.PUBLISH_AGENT_REMINDER",
  "reason": "$string:publish_agent_reminder_reason",
  "usedScene": {
    "when": "always"
  }
}
阅读 480