HarmonyOS Next 办公应用:日程提醒组件开发(一)

124 阅读1分钟

HarmonyOS Next 办公应用:日程提醒组件开发

概述

在 HarmonyOS Next 办公类应用开发中,实现日程提醒功能是常见需求。下面将介绍如何构建一个支持日程添加、提醒设置及持久化存储的日程提醒组件。

核心代码功能及对应代码段

1. 权限申请与日历账户管理
aboutToAppear() {
  const permissions: Permissions[] = ['ohos.permission.READ_CALENDAR', 'ohos.permission.WRITE_CALENDAR'];
  let atManager = abilityAccessCtrl.createAtManager();
  atManager.requestPermissionsFromUser(this.context, permissions).then((result: PermissionRequestResult) => {
    hilog.info(0X0000,TAG, `get Permission success, result: ${JSON.stringify(result)}`);
    this.calendarMgr = calendarManager.getCalendarManager(this.context);
    this.calendarMgr.getCalendar(this.myCalendarAccount).then((data: calendarManager.Calendar) => {
      this.calendar = data;
      this.calendar.setConfig(this.config).then(() => {
        hilog.info(0X0000,TAG, `Succeeded in setting config, data->${JSON.stringify(this.config)}`);
      }).catch((err: BusinessError) => {
        hilog.error(0X0000,TAG, `Failed to set config. Code: ${err.code}, message: ${err.message}`);
      });
    }).catch(() => {
      this.calendarMgr?.createCalendar(this.myCalendarAccount).then((data: calendarManager.Calendar) => {
        this.calendar = data;
        this.calendar?.setConfig(this.config).then(() => {
          hilog.info(0X0000,TAG, `Succeeded in setting config, data->${JSON.stringify(this.config)}`);
        }).catch((err: BusinessError) => {
          hilog.error(0X0000,TAG, `Failed to set config. Code: ${err.code}, message: ${err.message}`);
        });
      }).catch((error: BusinessError) => {
        hilog.error(0X0000,TAG, `Failed to create calendar. Code: ${error.code}, message: ${error.message}`);
      });
    });
  }).catch((error: BusinessError) => {
    hilog.error(0X0000,TAG, `get Permission error, error. Code: ${error.code}, message: ${error.message}`);
  })
}
  • 功能:在组件即将显示时,向用户申请系统日历的读写权限。获取日历管理对象,尝试获取指定的日历账户,若账户不存在则创建,并设置日历配置信息。
  • 代码段:aboutToAppear 方法内的代码。
2. 日程时间范围处理
addSchedule(startDate: Date, endDate: Date) {
  let currentDateTime = new Date(startDate);
  let endDateTime = new Date(endDate);
  while (currentDateTime <= endDateTime) {
    let scheduleTime = currentDateTime.toLocaleDateString('zh-CN', { year: 'numeric', month: '2-digit', day: '2-digit' }).replace(/\//g, '/');
    let parts = scheduleTime.split('/');
    let formattedMonth = parts[1].replace(/^0/, '');
    let formattedDay = parts[2].replace(/^0/, '');
    scheduleTime = `${parts[0]}/${formattedMonth}/${formattedDay}`;
    currentDateTime.setDate(currentDateTime.getDate() + 1);
    if (!this.scheduleArray.includes(scheduleTime)) {
      this.scheduleArray.push(scheduleTime);
    }
  }
}
  • 功能:根据给定的开始日期和结束日期,遍历日期范围,将每个日期格式化并添加到 scheduleArray 中,避免重复添加。
  • 代码段:addSchedule 方法内的代码。