HarmonyOS 鸿蒙Next 日历服务无法读取,没有任何报错可是读出来是空
HarmonyOS 鸿蒙Next 日历服务无法读取,没有任何报错可是读出来是空
已申请日历权限,但是无法读取显示为空,具体demo如下:
import { calendarManager } from '@kit.CalendarKit';
const TAG = "[SystemCalendarManager]"
export function getThisDayStart(date: Date = new Date()): Date {
let dateTime = new Date(date);
dateTime = new Date(dateTime.setHours(0));
dateTime = new Date(dateTime.setMinutes(0));
dateTime = new Date(dateTime.setSeconds(0));
dateTime = new Date(dateTime.setMilliseconds(0));
return dateTime
}
/** * 获取当日终点 * @param date 查询的日期 */
export function getThisDayEnd(date: Date = new Date()): Date {
let dateTime = new Date(date);
dateTime = new Date(dateTime.setHours(23));
dateTime = new Date(dateTime.setMinutes(59));
dateTime = new Date(dateTime.setSeconds(59));
dateTime = new Date(dateTime.setMilliseconds(999));
return dateTime
}
/** * 获取日历内容 * @param showDate 日期 * @param context * @returns */
export async function getSystemCalendarEvents(showDate: Date, context: Context): Promise<void> {
console.log(TAG, "getSystemCalendarEvents", showDate.toLocaleString())
if (canIUse("SystemCapability.Applications.CalendarData")) {
console.log(TAG, "canIUse", "SystemCapability.Applications.CalendarData")
try {
let calendarMgr = calendarManager.getCalendarManager(context);
let calendar = await calendarMgr.getCalendar()
let filter = calendarManager.EventFilter.filterByTime(getThisDayStart(showDate).getTime(),
getThisDayEnd(showDate).getTime());
let events: Array<calendarManager.Event> = await calendar.getEvents(filter);
console.warn(TAG, "getSystemCalendarEvents", JSON.stringify(filter), JSON.stringify(events))
} catch (err) {
console.error(TAG, "getSystemCalendarEvents", JSON.stringify(err))
}
}
return
}
------------------------------------------------------------------------------- 最终出来的结果为: [SystemCalendarManager] getSystemCalendarEvents {} []
更多关于HarmonyOS 鸿蒙Next 日历服务无法读取,没有任何报错可是读出来是空的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
您需要先addEvent创建日程才能查询Calendar下所有Event:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-calendarmanager-V5#addevent
export async function getSystemCalendarEvents(showDate: Date, context: Context): Promise<void> {
console.log(TAG, "getSystemCalendarEvents", showDate)
console.log(TAG, "getSystemCalendarEvents", showDate.toLocaleString())
if (canIUse("SystemCapability.Applications.CalendarData")) {
console.log(TAG, "canIUse", "SystemCapability.Applications.CalendarData")
try {
let calendarMgr = calendarManager.getCalendarManager(context);
let calendar: calendarManager.Calendar = await calendarMgr.getCalendar()
const event1: calendarManager.Event = {
type: calendarManager.EventType.NORMAL,
startTime: getThisDayStart(showDate).getTime(),
endTime: getThisDayEnd(showDate).getTime()
};
await calendar.addEvent(event1).then((data: number) => {
console.info(`Succeeded to add event, id -> ${data}`);
}).catch((err: BusinessError) => {
console.error(`Failed to add event, err -> ${JSON.stringify(err)}`);
});
let filter = calendarManager.EventFilter.filterByTime(
getThisDayStart(showDate).getTime(),
getThisDayEnd(showDate).getTime()
);
let events: Array<calendarManager.Event> = await calendar.getEvents(filter);
console.warn(TAG, "getSystemCalendarEvents", JSON.stringify(filter), JSON.stringify(events))
} catch (err) {
console.error(TAG, "err", JSON.stringify(err))
}
}
return
}
calendar获取日程事件是有权限限制的,只能获取本应用创建的日程事件,(系统日历程序权限更高,只有系统日历可以获取所有的日程事件)。
更多关于HarmonyOS 鸿蒙Next 日历服务无法读取,没有任何报错可是读出来是空的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
针对HarmonyOS 鸿蒙Next日历服务无法读取,且没有报错但返回结果为空的问题,可能的原因及解决方向如下:
-
权限验证:确认应用已正确申请并获取了读取日历数据的权限。在HarmonyOS中,权限管理严格,未授权将导致无法读取数据。
-
API使用:检查使用的日历服务API是否正确,包括方法调用、参数传递等。确保API版本与鸿蒙Next系统兼容。
-
数据同步状态:日历数据可能依赖于云服务同步,若设备未正确同步或云端数据为空,则本地读取也会为空。检查设备同步设置及云端数据状态。
-
系统Bug或限制:考虑是否为鸿蒙Next系统的已知问题或特定版本限制。可查阅官方更新日志或社区反馈,了解是否有类似情况报告。
-
调试与日志:启用应用的详细日志记录功能,尝试捕捉更多关于日历服务调用的信息,有助于定位问题。
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html 。