1# 日历账户管理 2 3日历账户用于存储和管理个人或团队的日程,通过日历账户,用户可以方便地查看、编辑和共享日程信息。 4 5日历管理器[CalendarManager](../reference/apis-calendar-kit/js-apis-calendarManager.md#calendarmanager)用于管理日历账户[Calendar](../reference/apis-calendar-kit/js-apis-calendarManager.md#calendar)。日历账户主要包含账户信息[CalendarAccount](../reference/apis-calendar-kit/js-apis-calendarManager.md#calendaraccount)和配置信息[CalendarConfig](../reference/apis-calendar-kit/js-apis-calendarManager.md#calendarconfig)。 6 7开发者可以创建属于应用特有的日历账户,还可以对日历账户进行新增、删除、更新和查询。此外,每个日程[Event](../reference/apis-calendar-kit/js-apis-calendarManager.md#event)归属于某一个特定的日历账户,可以通过日历账户对该账户下面的日程进行管理,具体相关指导可见[日程管理](calendarmanager-event-developer.md)。 8 9## 接口说明 10 11以下是日历账户管理的相关接口,更多详细接口及使用请参考[@ohos.calendarManager](../reference/apis-calendar-kit/js-apis-calendarManager.md)。 12 13| 接口名称 | 描述 | 14| ----------------------------------------------------------- | ------------------------------------------------------------ | 15| getCalendarManager(context: Context): CalendarManager | 根据上下文获取日历管理器对象CalendarManager,用于管理日历。 | 16| createCalendar(calendarAccount: CalendarAccount): Promise\<Calendar> | 根据日历账户信息,创建一个Calendar对象,使用Promise异步回调。 | 17| getCalendar(calendarAccount?: CalendarAccount): Promise\<Calendar> | 获取默认Calendar对象或者指定Calendar对象,使用Promise异步回调。<br>默认Calendar是日历存储首次运行时创建的,若创建Event时不关注其Calendar归属,则无须通过createCalendar()创建Calendar,直接使用默认Calendar。 | 18| getAllCalendars(): Promise\<Calendar[]> | 获取当前应用所有创建的Calendar对象以及默认Calendar对象,使用Promise异步回调。 | 19| deleteCalendar(calendar: Calendar): Promise\<void> | 删除指定Calendar对象,使用Promise异步回调。 | 20| getConfig(): CalendarConfig | 获取日历配置信息。 | 21| setConfig(config: CalendarConfig): Promise\<void> | 设置日历配置信息,使用Promise异步回调。 | 22| getAccount(): CalendarAccount | 获取日历账户信息。 | 23 24 25## 开发步骤 26 271. 导入相关依赖。 28 29 ```ts 30 // EntryAbility.ets 31 import { abilityAccessCtrl, AbilityConstant, common, PermissionRequestResult, Permissions, UIAbility, Want } from '@kit.AbilityKit'; 32 import { BusinessError } from '@kit.BasicServicesKit'; 33 import { calendarManager } from '@kit.CalendarKit'; 34 import { window } from '@kit.ArkUI'; 35 ``` 36 372. 申请权限。使用Calendar Kit时,需要在module.json5中声明申请读写日历日程所需的权限:`ohos.permission.READ_CALENDAR`和`ohos.permission.WRITE_CALENDAR`。具体指导可见[声明权限](../security/AccessToken/declare-permissions.md)。 38 393. 根据上下文获取日程管理器对象calendarMgr,用于对日历账户进行相关管理操作。推荐在`EntryAbility.ets`文件中进行操作。 40 41 ```ts 42 // EntryAbility.ets 43 export let calendarMgr: calendarManager.CalendarManager | null = null; 44 45 export let mContext: common.UIAbilityContext | null = null; 46 47 export default class EntryAbility extends UIAbility { 48 onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void { 49 console.info("Ability onCreate"); 50 } 51 52 onDestroy(): void { 53 console.info("Ability onDestroy"); 54 } 55 56 onWindowStageCreate(windowStage: window.WindowStage): void { 57 // Main window is created, set main page for this ability 58 console.info("Ability onWindowStageCreate"); 59 windowStage.loadContent('pages/Index', (err, data) => { 60 if (err.code) { 61 console.error(`Failed to load the content. Code: ${err.code}, message: ${err.message}`); 62 return; 63 } 64 console.info(`Succeeded in loading the content. Data: ${JSON.stringify(data)}`); 65 }); 66 mContext = this.context; 67 const permissions: Permissions[] = ['ohos.permission.READ_CALENDAR', 'ohos.permission.WRITE_CALENDAR']; 68 let atManager = abilityAccessCtrl.createAtManager(); 69 atManager.requestPermissionsFromUser(mContext, permissions).then((result: PermissionRequestResult) => { 70 console.info(`get Permission success, result: ${JSON.stringify(result)}`); 71 calendarMgr = calendarManager.getCalendarManager(mContext); 72 }).catch((error: BusinessError) => { 73 console.error(`get Permission error, error. Code: ${error.code}, message: ${error.message}`); 74 }) 75 } 76 77 onWindowStageDestroy(): void { 78 // Main window is destroyed, release UI related resources 79 console.info("Ability onWindowStageDestroy"); 80 } 81 82 onForeground(): void { 83 // Ability has brought to foreground 84 console.info("Ability onForeground"); 85 } 86 87 onBackground(): void { 88 // Ability has back to background 89 console.info("Ability onBackground"); 90 } 91 } 92 ``` 93 944. 根据日历账户信息,创建一个日历账户Calendar对象。 95 96 创建日历账户之前,开发者需要先根据账户信息进行查询,如果账户不存在则抛出异常信息,捕获到异常再进行日历账户的创建,否则可能会出现账户重复创建的问题。 97 98 ```ts 99 // Index.ets 100 import { BusinessError } from '@kit.BasicServicesKit'; 101 import { calendarMgr } from '../entryability/EntryAbility'; 102 import { calendarManager } from '@kit.CalendarKit'; 103 104 let calendar: calendarManager.Calendar | undefined = undefined; 105 // 指定日历账户信息 106 const calendarAccount: calendarManager.CalendarAccount = { 107 // 日历账户名称 108 name: 'MyCalendar', 109 // 日历账户类型 110 type: calendarManager.CalendarType.LOCAL, 111 // 日历账户显示名称,该字段如果不填,创建的日历账户在界面显示为空字符串。 112 displayName: 'MyCalendar' 113 }; 114 // 创建日历账户 115 calendarMgr?.createCalendar(calendarAccount).then((data: calendarManager.Calendar) => { 116 console.info(`Succeeded in creating calendar data->${JSON.stringify(data)}`); 117 calendar = data; 118 // 请确保日历账户创建成功后,再进行后续相关操作 119 // ... 120 }).catch((error: BusinessError) => { 121 console.error(`Failed to create calendar. Code: ${error.code}, message: ${error.message}`); 122 }); 123 ``` 124 1255. 日历账户创建之后,日历账户颜色默认为黑色,不指定日历账户颜色可能导致部分版本/设备深色模式下显示效果不佳。开发者需要调用setConfig()接口设置日历配置信息,包括是否打开日历账户下的日程提醒能力、设置日历账户颜色。 126 127 ```ts 128 // Index.ets 129 const calendarAccounts: calendarManager.CalendarAccount = { 130 name: 'MyCalendar', 131 type: calendarManager.CalendarType.LOCAL, 132 displayName: 'MyCalendar' 133 }; 134 // 日历配置信息 135 calendarMgr?.getCalendar(calendarAccounts, (err, data) => { 136 //获取日历账户 137 if (err) { 138 console.error(`Failed to get calendar, Code is ${err.code}, message is ${err.message}`); 139 } else { 140 const config: calendarManager.CalendarConfig = { 141 // 打开日程提醒 142 enableReminder: true, 143 // 设置日历账户颜色 144 color: '#aabbcc' 145 }; 146 // 设置日历配置信息 147 data.setConfig(config).then(() => { 148 console.info(`Succeeded in setting config, data->${JSON.stringify(config)}`); 149 }).catch((err: BusinessError) => { 150 console.error(`Failed to set config. Code: ${err.code}, message: ${err.message}`); 151 }) 152 } 153 }); 154 ``` 155 1566. 可以查询指定日历账户。 157 158 ```ts 159 // Index.ets 160 calendarMgr?.getCalendar(calendarAccount).then((data: calendarManager.Calendar) => { 161 console.info(`Succeeded in getting calendar, data -> ${JSON.stringify(data)}`); 162 }).catch((err: BusinessError) => { 163 console.error(`Failed to get calendar. Code: ${err.code}, message: ${err.message}`); 164 }); 165 ``` 166 1677. 也可以查询默认日历账户,默认日历账户是日历存储首次运行时创建的,若创建日程时不关注归属哪个账户,则无须单独创建日历账户,可以直接使用默认日历账户。 168 169 ```ts 170 // Index.ets 171 calendarMgr?.getCalendar().then((data: calendarManager.Calendar) => { 172 console.info(`Succeeded in getting calendar, data -> ${JSON.stringify(data)}`); 173 }).catch((err: BusinessError) => { 174 console.error(`Failed to get calendar. Code: ${err.code}, message: ${err.message}`); 175 }); 176 ``` 177 1788. 获取当前应用所有创建的日历账户及默认日历账户Calendar对象。 179 180 由于涉及数据隐私安全,进行了权限管控的应用无法获取其他应用创建的账户信息。 181 182 ```ts 183 // Index.ets 184 calendarMgr?.getAllCalendars().then((data: calendarManager.Calendar[]) => { 185 console.info(`Succeeded in getting all calendars, data -> ${JSON.stringify(data)}`); 186 data.forEach((calendar) => { 187 const account = calendar.getAccount(); 188 console.info(`account -> ${JSON.stringify(account)}`); 189 }) 190 }).catch((err: BusinessError) => { 191 console.error(`Failed to get all calendars. Code: ${err.code}, message: ${err.message}`); 192 }); 193 ``` 194 1959. 删除指定的日历账户,删除账户后,该账户下的所有日程会全部删除。 196 197 ```ts 198 // Index.ets 199 calendarMgr?.deleteCalendar(calendar).then(() => { 200 console.info("Succeeded in deleting calendar"); 201 }).catch((err: BusinessError) => { 202 console.error(`Failed to delete calendar. Code: ${err.code}, message: ${err.message}`); 203 }); 204 ```