自学记录鸿蒙API 13:Calendar Kit日历功能从学习到实践

打印 上一主题 下一主题

主题 1776|帖子 1776|积分 5328

这次的目标是学习和使用HarmonyOS的Calendar Kit功能,特别是最新的API 13版本。Calendar Kit让我感受到了一种与传统开辟完全不同的体验——它提供的不但是简单的日历功能,而是一套集创建、查询、更新、删除等强盛本领于一体的日程管理服务。

一开始,我仅仅是希望开辟一个能够管理日常工作和个人事务的小工具。但随着学习的深入,我意识到这个模块的潜力远远超出了我的预期。于是,带着对HarmonyOS的浓厚爱好,我决定通过实际开辟一个完整的日程管理应用,将理论和实践结合起来,全面探索Calendar Kit的功能。


第一部分:构建基础——获取日历管理器

每个良好的应用都有一个强盛的核心,在Calendar Kit中,这个核心就是CalendarManager。它是我们与日历和日程打交道的桥梁。通过它,我们可以完成从创建日历到操作日程的一切功能。
在开始之前,我们必要请求用户权限,由于日历涉及隐私信息,必要
ohos.permission.READ_CALENDAR和ohos.permission.WRITE_CALENDAR权限。
代码实现:初始化CalendarManager

以下是获取CalendarManager对象的代码实现:
  1. import { calendarManager } from '@kit.CalendarKit';
  2. import { Permissions, abilityAccessCtrl, common } from '@kit.AbilityKit';
  3. import { BusinessError } from '@kit.BasicServicesKit';
  4. let calendarMgr: calendarManager.CalendarManager | null = null;
  5. let mContext: common.UIAbilityContext | null = null;
  6. async function initializeCalendarManager() {
  7.     try {
  8.         const permissions = ['ohos.permission.READ_CALENDAR', 'ohos.permission.WRITE_CALENDAR'];
  9.         const atManager = abilityAccessCtrl.createAtManager();
  10.         await atManager.requestPermissionsFromUser(mContext, permissions);
  11.         console.info('权限请求成功');
  12.         calendarMgr = calendarManager.getCalendarManager(mContext);
  13.         console.info('CalendarManager 初始化成功');
  14.     } catch (error) {
  15.         console.error('初始化失败:', error);
  16.     }
  17. }
复制代码
我的思考

权限请求是开辟中的第一步,也是与用户交互的告急环节。通过清晰的提示,让用户明白为何必要这些权限,既能提升用户体验,也有助于合规开辟。

第二部分:管理日历——从创建到配置

在得到CalendarManager对象后,我们可以通过它创建和管理多个日历。一个日历是管理日程的容器,因此,为不同的用途创建独立的日历是非常有须要的。
代码实现:创建日历

以下代码展示了怎样使用createCalendar方法创建一个日历:
  1. const calendarAccount: calendarManager.CalendarAccount = {
  2.     name: 'MyWorkCalendar',
  3.     type: calendarManager.CalendarType.LOCAL,
  4.     displayName: '工作日历'
  5. };
  6. async function createCalendar() {
  7.     try {
  8.         const calendar = await calendarMgr?.createCalendar(calendarAccount);
  9.         console.info(`日历创建成功: ${JSON.stringify(calendar)}`);
  10.         return calendar;
  11.     } catch (error) {
  12.         console.error('创建日历失败:', error);
  13.     }
  14. }
复制代码
配置日历

创建日历后,我们可以通过setConfig方法为其添加配置,比方是否启用提醒、设置颜色等:
  1. const calendarConfig: calendarManager.CalendarConfig = {
  2.     enableReminder: true,
  3.     color: '#FF5733'
  4. };
  5. async function configureCalendar(calendar: calendarManager.Calendar) {
  6.     try {
  7.         await calendar.setConfig(calendarConfig);
  8.         console.info('日历配置成功');
  9.     } catch (error) {
  10.         console.error('配置日历失败:', error);
  11.     }
  12. }
复制代码
我的思考

我特别喜欢通过颜色区分不同的日历类型。比如,为工作日历设置红色,为个人日历设置蓝色,这种视觉化的管理方式让信息一目了然。

第三部分:日程管理——让生活井然有序

有了日历后,我们可以通过它添加日程。addEvent方法让我们能够轻松地创建一个事件,并为其添加标题、时间、描述等信息。
代码实现:添加日程

以下代码展示了怎样向日历中添加一个会议事件:
  1. const event: calendarManager.Event = {
  2.     title: '团队会议',
  3.     type: calendarManager.EventType.NORMAL,
  4.     startTime: Date.now() + 60 * 60 * 1000, // 1小时后
  5.     endTime: Date.now() + 2 * 60 * 60 * 1000, // 2小时后
  6.     location: { location: '会议室1', latitude: 0, longitude: 0 },
  7.     description: '讨论项目进展',
  8.     reminderTime: [10] // 提前10分钟提醒
  9. };
  10. async function addEvent(calendar: calendarManager.Calendar) {
  11.     try {
  12.         const eventId = await calendar.addEvent(event);
  13.         console.info(`日程添加成功,ID: ${eventId}`);
  14.     } catch (error) {
  15.         console.error('添加日程失败:', error);
  16.     }
  17. }
复制代码

第四部分:查询与筛选——精准管理日程

当日程变得越来越多时,查询和筛选就显得尤为告急。Calendar Kit 提供了丰富的查询功能,比如通过标题、时间或ID来筛选事件。
代码实现:按标题查询

以下代码展示了怎样通过标题模糊查询日程:
  1. async function getEventsByTitle(calendar: calendarManager.Calendar, title: string) {
  2.     try {
  3.         const filter = calendarManager.EventFilter.filterByTitle(title);
  4.         const events = await calendar.getEvents(filter);
  5.         console.info(`查询到的日程: ${JSON.stringify(events)}`);
  6.     } catch (error) {
  7.         console.error('查询日程失败:', error);
  8.     }
  9. }
复制代码
我的思考

模糊查询非常适合快速定位某类使命。比方,搜刮“会议”可以找到所有与会议相关的日程,这在实际应用中极具实用价值。

第五部分:实战项目——智能日程管理工具

基于以上功能,我开辟了一个智能日程管理应用。用户可以通过简洁的界面添加、查看和管理日程。
功能展示:创建新日程的UI组件

  1. @Entry
  2. @Component
  3. struct CreateEventPage {
  4.     @State title: string = '';
  5.     @State description: string = '';
  6.     @State startTime: string = '';
  7.     @State endTime: string = '';
  8.     build() {
  9.         Column() {
  10.             TextField({ text: this.title, placeholder: '请输入标题' })
  11.                 .onChange((value: string) => this.title = value);
  12.             TextField({ text: this.description, placeholder: '请输入描述' })
  13.                 .onChange((value: string) => this.description = value);
  14.             TextField({ text: this.startTime, placeholder: '开始时间 (YYYY-MM-DD HH:MM)' })
  15.                 .onChange((value: string) => this.startTime = value);
  16.             TextField({ text: this.endTime, placeholder: '结束时间 (YYYY-MM-DD HH:MM)' })
  17.                 .onChange((value: string) => this.endTime = value);
  18.             Button('创建日程')
  19.                 .onClick(async () => {
  20.                     await addEvent({
  21.                         title: this.title,
  22.                         description: this.description,
  23.                         startTime: new Date(this.startTime).getTime(),
  24.                         endTime: new Date(this.endTime).getTime()
  25.                     });
  26.                 });
  27.         }
  28.     }
  29. }
复制代码
智能化亮点



  • 可视化管理:通过颜色和图标区分不同类型的日历和事件。
  • 模糊查询:支持按标题或时间快速搜刮。
  • 智能提醒:根据用户设置的时间提前提醒告急使命。

总结:我的劳绩与展望

在这次学习和实践中,我不仅认识了HarmonyOS Calendar Kit的强盛功能,还深刻体会到模块化开辟的便捷与高效。它让我能够快速构建出一套功能完善的日程管理应用,满足不同用户的需求。
接下来,我计划整合语音助手功能,实现语音创建日程;同时,参加通知服务和AI保举,让应用更智能、更贴近用户需求。
当然如果你也在这一领域研究,不妨关注我,我们一起进步~!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

数据人与超自然意识

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表