更新记录
1.0.0(2026-04-16)
- 新增 Android / iOS 系统日历权限检测与申请
- 新增读取日历列表能力
- 新增创建、查询、更新、删除日历事件
- 新增提醒时间数组配置
- 新增 iOS 官方原生日历编辑页
- 新增 Android 打开系统日历能力
- 提供完整模板页与示例文档
平台兼容性
uni-app(4.75)
| Vue2 | Vue3 | Chrome | Safari | app-vue | app-nvue | Android | iOS | 鸿蒙 |
|---|---|---|---|---|---|---|---|---|
| × | × | × | × | × | √ | √ | √ | × |
| 微信小程序 | 支付宝小程序 | 抖音小程序 | 百度小程序 | 快手小程序 | 京东小程序 | 鸿蒙元服务 | QQ小程序 | 飞书小程序 | 小红书小程序 | 快应用-华为 | 快应用-联盟 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| × | × | × | × | × | × | × | × | × | × | × | × |
uni-app x(4.75)
| Chrome | Safari | Android | iOS | 鸿蒙 | 微信小程序 |
|---|---|---|---|---|---|
| × | × | √ | √ | × | × |
austin-calendar
austin-calendar 是一个 App 系统日历事件 UTS 插件,兼容 Android / iOS 实现。
点击试用插件
当前工程里的体验页包含:
- 当前平台能力展示
- 权限状态检测与申请
- iOS 官方原生日历编辑页
- 日历列表读取
- 创建测试事件
- 查询未来 30 天事件
- 更新最近创建事件
- 删除最近创建事件
- Android 打开系统日历
功能
- 支持 Android / iOS 系统日历权限检测
- 支持申请系统日历权限
- 支持 iOS 通过 EventKitUI 拉起苹果官方原生日历编辑页
- 支持查询可用日历列表
- 支持创建、更新、删除事件
- 支持查询指定时间范围内的事件
- 支持提醒时间数组
- Android 支持直接打开系统日历
- iOS 不支持直接跳转系统日历 App,但支持苹果官方原生日历编辑页
适用场景
- 预约成功后写入系统日历
- 会议、课程、排班、值班提醒
- 账单、续费、复诊、出行等到期提醒
- 企业 App 把工单或拜访计划同步到系统日历
API
getCalendarEventCapabilities()
返回当前平台能力:
supportedplatformsupportsListCalendarssupportsCreatesupportsUpdatesupportsDeletesupportsQuerysupportsAlarmssupportsOpenSystemCalendarrequiresPermissionnotes
补充说明:
supportsOpenSystemCalendar当前主要用于 Android 直接拉起系统日历- iOS 请使用
presentCalendarEventEditor(options)打开苹果官方原生日历编辑页
getCalendarPermissionStatus()
同步获取当前系统日历权限状态。
返回字段:
status- Android:
granted/prompt/denied - iOS:
full-access/write-only/authorized/not-determined/denied/restricted
- Android:
grantedcanReadcanWritedoNotAskAgainerrCodeerrMsg
补充说明:
- iOS 的
write-only表示系统已经授予“仅写入”权限,此时granted = true、canWrite = true、canRead = false - 如果业务需要读取日历列表、查询事件、更新已有事件,iOS 仍需要
full-access/authorized
requestCalendarPermission(options)
异步申请系统日历权限。
参数表:
| 参数 | 说明 | 类型 | 默认值 | 可选值 |
|---|---|---|---|---|
success |
权限申请成功回调 | Function |
- | - |
fail |
权限申请失败回调 | Function |
- | - |
complete |
权限申请结束回调 | Function |
- | - |
presentCalendarEventEditor(options)
拉起 iOS 官方原生日历编辑页。
- iOS:支持
- Android:当前返回不支持,请继续使用
createCalendarEvent或openSystemCalendar
说明:
- 不传
eventId时,按“新建事件”方式打开 - 传入
eventId时,按“编辑已有事件”方式打开 - iOS 17 及以上可以直接使用这套官方编辑页,不强依赖先申请日历权限
- 由于 EventKitUI 在 iOS 17 上以系统进程界面处理保存,回调只保证返回
action,不保证返回最终事件对象
参数表:
| 参数 | 说明 | 类型 | 默认值 | 可选值 |
|---|---|---|---|---|
eventId |
传入时编辑已有事件,不传时创建新事件 | String |
'' |
- |
calendarId |
预设目标日历 ID,系统编辑页里用户仍可改 | String |
'' |
- |
title |
预填标题 | String |
'' |
- |
startTime |
预填开始时间,毫秒 | Number |
0 |
- |
endTime |
预填结束时间,毫秒 | Number |
0 |
- |
allDay |
是否预设为全天事件 | Boolean |
- | true / false |
notes |
预填备注 | String |
'' |
- |
location |
预填地点 | String |
'' |
- |
alarms |
预填提醒分钟数组 | Number[] |
[] |
- |
success |
编辑页关闭后的成功回调,action 可能为 saved / deleted / canceled |
Function |
- | - |
fail |
拉起失败回调 | Function |
- | - |
complete |
整个流程结束回调 | Function |
- | - |
listCalendars()
同步读取当前可用日历列表。
createCalendarEvent(options)
创建系统日历事件。
参数表:
| 参数 | 说明 | 类型 | 默认值 | 可选值 |
|---|---|---|---|---|
calendarId |
目标日历 ID,不传时自动使用默认日历 | String |
'' |
- |
title |
事件标题 | String |
- | - |
startTime |
开始时间时间戳,毫秒 | Number |
- | - |
endTime |
结束时间时间戳,毫秒 | Number |
- | - |
allDay |
是否全天事件 | Boolean |
false |
true / false |
notes |
备注 | String |
'' |
- |
location |
地点 | String |
'' |
- |
alarms |
提前多少分钟提醒,例如 [15, 60] |
Number[] |
[] |
- |
updateCalendarEvent(options)
更新系统日历事件。
参数与 createCalendarEvent 基本一致,额外需要:
| 参数 | 说明 | 类型 | 默认值 | 可选值 |
|---|---|---|---|---|
eventId |
待更新的事件 ID | String |
- | - |
deleteCalendarEvent(options)
删除系统日历事件。
| 参数 | 说明 | 类型 | 默认值 | 可选值 |
|---|---|---|---|---|
eventId |
待删除的事件 ID | String |
- | - |
queryCalendarEvents(options)
查询时间范围内的系统日历事件。
| 参数 | 说明 | 类型 | 默认值 | 可选值 |
|---|---|---|---|---|
startTime |
查询开始时间,毫秒 | Number |
- | - |
endTime |
查询结束时间,毫秒 | Number |
- | - |
calendarId |
指定日历 ID,不传表示全部 | String |
'' |
- |
keyword |
按标题、备注、地点做本地过滤 | String |
'' |
- |
limit |
最多返回多少条 | Number |
50 |
- |
openSystemCalendar(time)
打开系统日历。
- Android:支持跳到指定时间附近
- iOS:当前不支持直接拉起系统日历 App,请改用
presentCalendarEventEditor(options)打开苹果官方原生日历编辑页
返回结果
日历项
| 字段 | 说明 | 类型 |
|---|---|---|
id |
日历 ID | String |
title |
日历名称 | String |
accountName |
账户名 | String |
accountType |
账户类型 | String |
ownerAccount |
拥有者账户 | String |
isPrimary |
是否主日历 | Boolean |
allowsModifications |
是否允许修改事件 | Boolean |
事件项
| 字段 | 说明 | 类型 |
|---|---|---|
id |
事件 ID | String |
calendarId |
所属日历 ID | String |
calendarTitle |
所属日历名称 | String |
title |
事件标题 | String |
startTime |
开始时间,毫秒 | Number |
endTime |
结束时间,毫秒 | Number |
allDay |
是否全天 | Boolean |
notes |
备注 | String |
location |
地点 | String |
alarms |
提醒时间数组,单位分钟 | Number[] |
timezone |
时区标识 | String |
原生编辑页结果
| 字段 | 说明 | 类型 |
|---|---|---|
ok |
是否成功进入或完成官方编辑页流程 | Boolean |
platform |
平台标识 | String |
action |
saved / deleted / canceled / busy / start-failed / permission-denied / not-found / unsupported |
String |
eventId |
仅在编辑已有事件时回传原始事件 ID;新建事件不保证返回最终事件 ID | String |
errCode |
错误码 | Number |
errMsg |
错误信息 | String |
最小示例
import {
getCalendarPermissionStatus,
requestCalendarPermission,
presentCalendarEventEditor,
createCalendarEvent,
} from '@/uni_modules/austin-calendar'
const permission = getCalendarPermissionStatus()
if (!permission.granted) {
requestCalendarPermission({
success(res) {
console.log('permission-success', res)
},
fail(res) {
console.log('permission-fail', res)
},
})
}
const now = Date.now()
const createRes = createCalendarEvent({
title: '测试预约提醒',
startTime: now + 60 * 60 * 1000,
endTime: now + 90 * 60 * 1000,
notes: '由 austin-calendar 创建',
location: '线上会议室',
alarms: [15],
})
console.log('createRes', createRes)
presentCalendarEventEditor({
title: '苹果官方原生日历编辑页测试',
startTime: now + 2 * 60 * 60 * 1000,
endTime: now + 3 * 60 * 60 * 1000,
notes: '用户可以在系统原生编辑页里继续修改并保存',
alarms: [15],
success(res) {
console.log('editor-success', res)
},
fail(res) {
console.log('editor-fail', res)
},
})
注意
- Android / iOS 都依赖系统日历权限,首次使用前建议先检测并申请
- 如果设备没有可写日历或用户关闭权限,会返回统一错误码
-
manifest.json 配置
{
"app-plus": {
"distribute": {
"android": {
"permissions": [
"<uses-permission android:name=\"android.permission.READ_CALENDAR\"/>",
"<uses-permission android:name=\"android.permission.WRITE_CALENDAR\"/>"
]
},
"ios": {
"privacyDescription": {
"NSCalendarsUsageDescription": "用于读取和写入系统日历事件",
"NSCalendarsFullAccessUsageDescription": "用于读取和管理系统日历事件",
"NSCalendarsWriteOnlyAccessUsageDescription": "用于写入系统日历事件",
"NSContactsUsageDescription": "用于在系统原生日历编辑页中展示参与人等联系人信息"
}
}
}
}
}

收藏人数:
购买源码授权版(
试用
赞赏(0)
下载 606
赞赏 4
下载 11554905
赞赏 1905
赞赏
京公网安备:11010802035340号