日程管理
应用向日历中添加日程,用于到点提醒。例如预约办理业务,在应用中添加、修改预约信息或取消预约同步到日历中作为日程提醒。
需要日历读写权限ohos.permission.READ_CALENDAR、ohos.permission.WRITE_CALENDAR
创建日历管理对象
必须在同意权限之后创建。根据上下文获取的日历管理对象创建日历,在日历上创建日程
const ctx = AppStorage.get('context') as Context // 在EntryAbility中保存的context,便于全局使用
const calendarMgr = calendarManager.getCalendarManager(ctx)
获取日历对象
每个日历对象创建的日程都是独自管理的,日历应用打开侧边栏在华为账号下存在默认的我的日历,通过getCalendar
方法获取默认日历对象,也可以点击日历前面的勾选框统一关闭或打开日程
// 1、获取默认的日历对象
calendarMgr.getCalendar().then(res => {
// res 默认的日历对象
calendar = res
})
// 2、创建日历对象
const calendarAccount: calendarManager.CalendarAccount = {
name: 'test',
type: calendarManager.CalendarType.LOCAL,
displayName : '咕咕咕' // 在日历应用侧边栏中新增一个咕咕咕日历
};
calendarMgr.createCalendar(calendarAccount).then(res => {
// res 创建的新的日历对象
calendar = res
})
通过日历对象管理日程
新增日程管理
// 新增
const event: calendarManager.Event = {
type: calendarManager.EventType.NORMAL, // 日程提醒类型
title: '预约网点', // 日程标题
description: '个人非现金业务办理', // 日程描述
startTime: , // 日程开始时间(13位时间戳)
endTime: // 日程结束时间(13位时间戳)
};
calendar.addEvent(event).then(id => {
// 日程id在修改和删除时使用
})
// 删除
calendar.deleteEvent(id)
calendar.deleteEvents([...ids]) // 批量删除
// 修改
// event: calendarManager.Event
event.id = id
event.title = '新标题'
calendar.updateEvent(event)
// 查询
// filterByTime:时间查询; filterById:id查询;filterByTitle:标题查询
const filter = calendarManager.EventFilter.filterByTime(startTime, endTime)
calendar.getEvents(filter).then(res => {
// 根据开始时间和结束时间查询的所以符合条件的结果
})
完整代码
import { calendarManager } from '@kit.CalendarKit'
class CalendarManager {
private calendar: calendarManager.Calendar | null = null
private init() {
return new Promise<calendarManager.Calendar>((resolve, reject) => {
if (this.calendar) {
resolve(this.calendar)
} else {
const ctx = AppStorage.get('context') as Context
const calendarMgr = calendarManager.getCalendarManager(ctx)
calendarMgr.getCalendar().then((data) => {
this.calendar = data
resolve(this.calendar)
})
}
})
}
async addEvent(title: string, content: string, startDate: string, endDate: string) {
const event: calendarManager.Event = {
type: calendarManager.EventType.NORMAL,
title: title,
description: content,
startTime: new Date(startDate).getTime(),
endTime: new Date(endDate).getTime()
};
return this.init().then(data => data.addEvent(event))
}
getEvent(startDate: string, endDate: string) {
const startTime = new Date(startDate).getTime()
const endTime = new Date(endDate).getTime()
const filter = calendarManager.EventFilter.filterByTime(startTime, endTime)
return new Promise<number[]>((resolve, reject) => {
this.init().then(data => {
data.getEvents(filter).then(res => {
const ids = res.map((item) => item.id!)
resolve(ids)
}).catch(reject)
})
})
}
delEvent(startDate: string, endDate: string) {
return this.getEvent(startDate, endDate).then(res => this.calendar?.deleteEvent(res[0]))
}
}
export default new CalendarManager()