鸿蒙日历服务原来是这样实现的....

822 阅读3分钟

刚才外面人多 进来我给各位细说

日历:用于记载日期、节日,重要事件的工具。

前言 -运作机制

Calendar Kit为用户提供了一系列接口来获取日历账户,并使用特定的接口向日历账户中写入日程。如果写入的日程带有提醒时间则系统会在时间到达时向用户发送提醒

# Calendar Kit开发指南

1 申请权限 Calendar Kit所需权限有:

  • ohos.permission.READ_CALENDAR:用于读取日历日程信息。
  • ohos.permission.WRITE_CALENDAR:用于写入日历日程信息 必须手动申请且获得用户授权才能使用上述权限

a 申请步骤

entry/src/main/module.json5中配置所需申请的权限

// 日历
// 权限级别: normal
// 授权方式: user_grant
{
"name": "ohos.permission.READ_CALENDAR", // 只读日历
"reason": '$string:permission_reason_calendar',// 授权原因
"usedScene": {} // 额外参数
},
{
"name": "ohos.permission.WRITE_CALENDAR", // 写入日历
"reason": '$string:permission_reason_calendar',
"usedScene": {}
},

2 在代码中手动申请权限(下面是我使用封装好的)

感兴趣可以查看我之前的文章 应用权限管理

// 获取弹窗权限
async requestPermissions() {
  try {
    await permissionManger.requestPermissions(this.permissions)
  } catch (err) {
    promptAction.showDialog({
      message: "开启权限体验更好的服务需要开启吗",
      buttons: [
        { text: "取消", color: "#999999" },
        { text: "设置", color: "0000ff" }
      ]
    })
      .then((res) => {
        if (res.index === 1) {
          permissionManger.openPermissionSettingsPage()
        }
      })
  }
}

日志开发 -> 官方文档

# 日程管理能力

1 导入模块

import calendarManager from '@ohos.calendarManager';

根据上下文获取 calendarManager对象 用于管理日历

image.png

2 CalendarManager

示例中需先通过getCalendarManager()方法获取CalendarManager对象,再通过此对象调用对应方法,进行Calendar的创建、删除、修改、查询等操作。 调用的方法有很多

  • createCalendar 用于创建 Calender image.png
  • deleteCanlendar 用于删除指定的calendar

image.png

  • getCalendar 用于获取Calendar

image.png

  • getAllCalendars 用于获取应用所创建的Calendar对象以默认Calendar对象

image.png

3 Calendar

下列API示例中需先通过createCalendar()getCalendar()中任一方法获取Calendar对象,再通过此对象调用对应方法,对该Calendar下的日程进行创建、删除、修改、查询等操作

Calendar
addEvent创建日程
addEvents批量创建日程
deleteEvent删除指定的id日程
deleteEvents根据日程id 批量删除日程
updateEvent更新日程
getEvents查询Calendar下所有Event
getVonfig获取日历配置信息

详情可以查看文档

添加日程使用 实例:

// 添加日程
async addEvent(event: calendarManager.Event) {

// 根据上下文获取CalendarManager对象,用于管理日历
const calendar = calendarManager.getCalendarManager(getContext())

  return calender.addEvent(event)
}

返回值 返回日程的id

属性

名称类型只读必填说明
idnumber日历帐户id。

查询实例:

  • filterById 根据id查询
  • filterByTime 根据时间查询
  • filterTitle 根据标题查询
// 更具标题查询日程
async searchEvents(title: string) {
// 根据上下文获取CalendarManager对象,用于管理日历
const calendar = calendarManager.getCalendarManager(getContext())
// 查询条件
calendarManager.EventFilter.filterByTitle(title)
// 可选参数 可传可不传
  return calender.getEvents(eventFilter) 
}

删除 传入的参数 日程的id 实例:

// 删除单个日程
async deleteEvent(id: number) {
// 根据上下文获取CalendarManager对象,用于管理日历
const calendar = calendarManager.getCalendarManager(getContext())
  return calender.deleteEvent(id)
}

添加日程Event对象参数 更多参数详情

Event参数说明必填
title标题
type日志类型
starTime日程开始时间
endTime日程结束时间

以上就是添加 删除 查询的内容

以上就是我个人见解 本人小白一名 如有错的地方 敬请谅解 欢迎大家补充 感谢