HarmonyOS 鸿蒙Next 日历服务无法读取,没有任何报错可是读出来是空

发布于 1周前 作者 phonegap100 最后一次编辑是 5天前 来自 鸿蒙OS

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

2 回复

您需要先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日历服务无法读取,且没有报错但返回结果为空的问题,可能的原因及解决方向如下:

  1. 权限验证:确认应用已正确申请并获取了读取日历数据的权限。在HarmonyOS中,权限管理严格,未授权将导致无法读取数据。

  2. API使用:检查使用的日历服务API是否正确,包括方法调用、参数传递等。确保API版本与鸿蒙Next系统兼容。

  3. 数据同步状态:日历数据可能依赖于云服务同步,若设备未正确同步或云端数据为空,则本地读取也会为空。检查设备同步设置及云端数据状态。

  4. 系统Bug或限制:考虑是否为鸿蒙Next系统的已知问题或特定版本限制。可查阅官方更新日志或社区反馈,了解是否有类似情况报告。

  5. 调试与日志:启用应用的详细日志记录功能,尝试捕捉更多关于日历服务调用的信息,有助于定位问题。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部