本文原创发布在华为开发者社区。
介绍
本示例通过集成日历kit将选课提醒加入日程,使用日历一键查看能力拉起目标页面。
效果预览
使用说明
- 注册日历一键查看服务:小艺开放平台-智慧服务-HarmonyOS服务开放平台-其他服务-创建服务。
- 进入应用,点击添加选课日程提醒按钮。
- 打开日历,显示添加的日程,点击可跳转到选课页面,在选课页面点击返回按钮可以返回首页。
相关权限
- 请求日历读写权限。 ../entry/src/main/module.json5文件中添加权限。
"requestPermissions": [
{
"name": "ohos.permission.READ_CALENDAR",
"reason": "$string:reason_read_calendar",
"usedScene": {
"abilities": [
"EntryAbility"
],
"when": "inuse"
}
},
{
"name": "ohos.permission.WRITE_CALENDAR",
"reason": "$string:reason_write_calendar",
"usedScene": {
"abilities": [
"EntryAbility"
],
"when": "inuse"
}
}
]
实现思路
选课页面的构建
搭建一个简单的选课页面的示例页面,设置message提示消息,设置Button按钮,点击即可跳转至首页。
Row() {
Text(this.message)
}
.height('80%')
Row().height(100)
Button('返回首页')
.onClick(() => {
router.replaceUrl({url: 'pages/Index'})
})
实现添加日程功能
- 获取选课信息,构造函数queryCourseSelectInfo(),timePoint利用getTime()方法获取选课开放时间(即现在时间),示例将从开放时间设置为此刻开始以后一个小时内。
queryCourseSelectInfo() {
this.timePoint = new Date().getTime() + 1000 * 60 * 60
}
- 添加事件到日历中,形成一个日程,构造函数addEventToCalendar(),当现在应用还没有获取日历读写权限时,提示信息。
addEventToCalendar() {
if (!this.userGrant) {
hilog.info(0x0000, TAG, '%{public}s', 'no calendar permission.');
promptAction.showToast({ message: '请先申请日历读写权限' });
return
}
···
}
- 当应用有日历读写权限时,构造日程事件,传入的参数为日程type、日程开始时间、日程结束时间、日程标题。
let calendar : calendarManager.Calendar | undefined = undefined;
const service: calendarManager.EventService = {
type: calendarManager.ServiceType.TRIP,
uri: 'coursedemo://huawei.edudemo.com/courseselect'
}
const event: calendarManager.Event = {
type: calendarManager.EventType.NORMAL,
startTime: this.timePoint - 60 * 60 * 1000,
endTime: this.timePoint + 60 * 60 * 1000,
title: '选课',
service: service
};
- 将日程事件添加到日历中。使用addEvent将之前构造的event添加到日历中。
this.calendarMgr?.getCalendar().then((data: calendarManager.Calendar) => {
calendar = data;
calendar.addEvent(event, (err: BusinessError, data: number): void => {
promptAction.showToast({
message: '已将选课添加到日程提醒!'
});
});
})
- 构造函数requestCalendarPermission(),获取应用是否已经获取日历读写权限。
async requestCalendarPermission() {
let context = getContext() as common.UIAbilityContext;
let atManager = abilityAccessCtrl.createAtManager();
let grantStatus = await atManager.requestPermissionsFromUser(context, ['ohos.permission.READ_CALENDAR', 'ohos.permission.WRITE_CALENDAR']);
if(grantStatus.authResults[0] === 0) {
this.userGrant = true;
this.calendarMgr = calendarManager.getCalendarManager(context);
}
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。