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

简介: 本文介绍了使用HarmonyOS的Calendar Kit开发日程管理应用的过程。通过API 13版本,不仅实现了创建、查询、更新和删除日程等基础功能,还深入探索了权限请求、日历配置、事件添加及查询筛选等功能。实战项目中,开发了一个智能日程管理工具,具备可视化管理、模糊查询和智能提醒等特性。最终,作者总结了模块化开发的优势,并展望了未来加入语音助手和AI推荐功能的计划。

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

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


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

每个优秀的应用都有一个强大的核心,在Calendar Kit中,这个核心就是CalendarManager。它是我们与日历和日程打交道的桥梁。通过它,我们可以完成从创建日历到操作日程的一切功能。

在开始之前,我们需要请求用户权限,因为日历涉及隐私信息,需要
ohos.permission.READ_CALENDAR和ohos.permission.WRITE_CALENDAR权限。

代码实现:初始化CalendarManager

以下是获取CalendarManager对象的代码实现:

import { calendarManager } from '@kit.CalendarKit';
import { Permissions, abilityAccessCtrl, common } from '@kit.AbilityKit';
import { BusinessError } from '@kit.BasicServicesKit';
let calendarMgr: calendarManager.CalendarManager | null = null;
let mContext: common.UIAbilityContext | null = null;
async function initializeCalendarManager() {
    try {
        const permissions = ['ohos.permission.READ_CALENDAR', 'ohos.permission.WRITE_CALENDAR'];
        const atManager = abilityAccessCtrl.createAtManager();
        await atManager.requestPermissionsFromUser(mContext, permissions);
        console.info('权限请求成功');
        calendarMgr = calendarManager.getCalendarManager(mContext);
        console.info('CalendarManager 初始化成功');
    } catch (error) {
        console.error('初始化失败:', error);
    }
}

我的思考

权限请求是开发中的第一步,也是与用户交互的重要环节。通过清晰的提示,让用户理解为何需要这些权限,既能提升用户体验,也有助于合规开发。


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

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

代码实现:创建日历

以下代码展示了如何使用createCalendar方法创建一个日历:

const calendarAccount: calendarManager.CalendarAccount = {
    name: 'MyWorkCalendar',
    type: calendarManager.CalendarType.LOCAL,
    displayName: '工作日历'
};
async function createCalendar() {
    try {
        const calendar = await calendarMgr?.createCalendar(calendarAccount);
        console.info(`日历创建成功: ${JSON.stringify(calendar)}`);
        return calendar;
    } catch (error) {
        console.error('创建日历失败:', error);
    }
}

配置日历

创建日历后,我们可以通过setConfig方法为其添加配置,例如是否启用提醒、设置颜色等:

const calendarConfig: calendarManager.CalendarConfig = {
    enableReminder: true,
    color: '#FF5733'
};
async function configureCalendar(calendar: calendarManager.Calendar) {
    try {
        await calendar.setConfig(calendarConfig);
        console.info('日历配置成功');
    } catch (error) {
        console.error('配置日历失败:', error);
    }
}

我的思考

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


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

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

代码实现:添加日程

以下代码展示了如何向日历中添加一个会议事件:

const event: calendarManager.Event = {
    title: '团队会议',
    type: calendarManager.EventType.NORMAL,
    startTime: Date.now() + 60 * 60 * 1000, // 1小时后
    endTime: Date.now() + 2 * 60 * 60 * 1000, // 2小时后
    location: { location: '会议室1', latitude: 0, longitude: 0 },
    description: '讨论项目进展',
    reminderTime: [10] // 提前10分钟提醒
};
async function addEvent(calendar: calendarManager.Calendar) {
    try {
        const eventId = await calendar.addEvent(event);
        console.info(`日程添加成功,ID: ${eventId}`);
    } catch (error) {
        console.error('添加日程失败:', error);
    }
}

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

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

代码实现:按标题查询

以下代码展示了如何通过标题模糊查询日程:

async function getEventsByTitle(calendar: calendarManager.Calendar, title: string) {
    try {
        const filter = calendarManager.EventFilter.filterByTitle(title);
        const events = await calendar.getEvents(filter);
        console.info(`查询到的日程: ${JSON.stringify(events)}`);
    } catch (error) {
        console.error('查询日程失败:', error);
    }
}

我的思考

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


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

基于以上功能,我开发了一个智能日程管理应用。用户可以通过简洁的界面添加、查看和管理日程。

功能展示:创建新日程的UI组件

@Entry
@Component
struct CreateEventPage {
    @State title: string = '';
    @State description: string = '';
    @State startTime: string = '';
    @State endTime: string = '';
    build() {
        Column() {
            TextField({ text: this.title, placeholder: '请输入标题' })
                .onChange((value: string) => this.title = value);
            TextField({ text: this.description, placeholder: '请输入描述' })
                .onChange((value: string) => this.description = value);
            TextField({ text: this.startTime, placeholder: '开始时间 (YYYY-MM-DD HH:MM)' })
                .onChange((value: string) => this.startTime = value);
            TextField({ text: this.endTime, placeholder: '结束时间 (YYYY-MM-DD HH:MM)' })
                .onChange((value: string) => this.endTime = value);
            Button('创建日程')
                .onClick(async () => {
                    await addEvent({
                        title: this.title,
                        description: this.description,
                        startTime: new Date(this.startTime).getTime(),
                        endTime: new Date(this.endTime).getTime()
                    });
                });
        }
    }
}

智能化亮点

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

总结:我的收获与展望

在这次学习和实践中,我不仅熟悉了HarmonyOS Calendar Kit的强大功能,还深刻体会到模块化开发的便捷与高效。它让我能够快速构建出一套功能完善的日程管理应用,满足不同用户的需求。

接下来,我计划整合语音助手功能,实现语音创建日程;同时,加入通知服务和AI推荐,让应用更智能、更贴近用户需求。

当然如果你也在这一领域研究,不妨关注我,我们一起进步~!

目录
打赏
0
1
1
1
160
分享
相关文章
基于 API 网关践行 API First 开发实践
API First 开发模式的核心在于:以 API 为先,将其视为“头等公民”,在构建应用、服务及集成之前,应优先定义并设计 API 及其配套。API First 作为一种相对较新的开发模式,它已逐渐流行并获得业内的广泛认可。
195 73
利用Postman和Apipost进行API测试的实践与优化-动态参数
在API测试中,Postman和Apipost是常用的工具。Postman内置变量功能有限,面对复杂场景时需编写JavaScript脚本,增加了维护成本。而Apipost提供丰富的内置变量、可视化动态值配置和低代码操作,支持生成真实随机数据,如邮箱、手机号等,显著提升测试效率和灵活性。对于复杂测试场景,Apipost是更好的选择,能有效降低开发与维护成本,提高测试工作的便捷性和可维护性。
以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
60 5
以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
鸿蒙赋能智慧物流:AI类目标签技术深度解析与实践
在数字化浪潮下,物流行业面临变革,传统模式的局限性凸显。AI技术为物流转型升级注入动力。本文聚焦HarmonyOS NEXT API 12及以上版本,探讨如何利用AI类目标签技术提升智慧物流效率、准确性和成本控制。通过高效数据处理、实时监控和动态调整,AI技术显著优于传统方式。鸿蒙系统的分布式软总线技术和隐私保护机制为智慧物流提供了坚实基础。从仓储管理到运输监控再到配送优化,AI类目标签技术助力物流全流程智能化,提高客户满意度并降低成本。开发者可借助深度学习框架和鸿蒙系统特性,开发创新应用,推动物流行业智能化升级。
深度解析淘宝商品评论API接口:技术实现与应用实践
淘宝商品评论API接口是电商数据驱动的核心工具,帮助开发者高效获取用户评价、画像及市场趋势。其核心功能包括多维度信息采集、筛选排序、动态更新、OAuth 2.0认证和兼容多种请求方式。通过该接口,开发者可进行商品优化、竞品分析、舆情监控等。本文详细解析其技术原理、实战应用及挑战应对策略,助力开启数据驱动的电商运营新篇章。
|
3月前
|
自学记录鸿蒙API 13:PreviewKit从文件预览到应用开发
通过学习API 13,我深入研究了**PreviewKit(文件预览服务)**。该模块支持快速预览多种文件类型(文本、图片、视频、音频、PDF等),为文件管理类应用提供系统级支持。本文分享了从搭建开发环境到实现单文件和多文件预览的全过程,并介绍了如何构建一个实用的文件预览助手应用。通过实践,不仅掌握了技术细节,还提升了个人开发能力。希望这些经验能为其他开发者带来启发与帮助。
68 10
自学记录鸿蒙API 13:PreviewKit从文件预览到应用开发
盘点原生JS中目前最没用的几个功能API
在JavaScript的发展历程中,许多功能与API曾风光无限,但随着技术进步和语言演化,部分功能逐渐被淘汰或被更高效的替代方案取代。例如,`with`语句使代码作用域复杂、可读性差;`void`操作符功能冗余且影响可读性;`eval`函数存在严重安全风险和性能问题;`unescape`和`escape`函数已被`decodeURIComponent`和`encodeURIComponent`取代;`arguments`对象则被ES6的剩余参数语法替代。这些变化体现了JavaScript不断优化的趋势,开发者应紧跟技术步伐,学习新技能,适应新技术环境。
47 10
速卖通商品详情接口(速卖通API系列)
速卖通(AliExpress)是阿里巴巴旗下的跨境电商平台,提供丰富的商品数据。通过速卖通开放平台(AliExpress Open API),开发者可获取商品详情、订单管理等数据。主要功能包括商品搜索、商品详情、订单管理和数据报告。商品详情接口aliexpress.affiliate.productdetail.get用于获取商品标题、价格、图片等详细信息。开发者需注册账号并创建应用以获取App Key和App Secret,使用PHP等语言调用API。该接口支持多种请求参数和返回字段,方便集成到各类电商应用中。
淘宝拍立淘按图搜索API接口系列的应用与数据解析
淘宝拍立淘按图搜索API接口是阿里巴巴旗下淘宝平台提供的一项基于图像识别技术的创新服务。以下是对该接口系列的应用与数据解析的详细分析
亚马逊商品详情接口(亚马逊 API 系列)
亚马逊作为全球最大的电商平台之一,提供了丰富的商品资源。开发者和电商从业者可通过亚马逊商品详情接口获取商品的描述、价格、评论、排名等数据,对市场分析、竞品研究、价格监控及业务优化具有重要价值。接口基于MWS服务,支持HTTP/HTTPS协议,需注册并获得API权限。Python示例展示了如何使用mws库调用接口获取商品详情。应用场景包括价格监控、市场调研、智能选品、用户推荐和库存管理等,助力电商运营和决策。
92 23
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等