WearableCalendarContract查询不返回重复事件(WearableCalendar

2019-10-22 14:35发布

我创建了Android Wear将显示日历事件表盘。 基于此页面 (以及WatchFace在SDK中提供的样品),我设法查询当天的下一个事件,并在我的表盘显示它们(下面是我用它来查询事件的代码)。

问题是,经常性的事件未在游标返回,因此不会显示在手表表面。 是否有任何参数设置为查询添加拿到重复事件?

private static final String[] PROJECTION = {
        CalendarContract.Calendars._ID, // 0
        CalendarContract.Events.DTSTART, // 1
        CalendarContract.Events.DTEND, // 2
        CalendarContract.Events.DISPLAY_COLOR, // 3
};

protected List<SpiralEvent> queryEvents() {
    // event is a custom POJO object 
    List<Event> events = new ArrayList<>();

    long begin = System.currentTimeMillis();

    Uri.Builder builder = WearableCalendarContract.Instances.CONTENT_URI.buildUpon();
    ContentUris.appendId(builder, begin);
    ContentUris.appendId(builder, begin + DateUtils.DAY_IN_MILLIS);

    final Cursor cursor = mService.getContentResolver()
            .query(builder.build(),
                    PROJECTION,
                    null, // selection (all)
                    null, // selection args
                    null); // order

    // get the start and end time, and the color
    while (cursor.moveToNext()) {
        long start = cursor.getLong(1);
        long end = cursor.getLong(2);
        int color = cursor.getInt(3);
        events.add(new Event(start, end, color));
    }

    cursor.close();

    return events;
}

Answer 1:

你必须使用CalendarContract.Instances.BEGIN代替CalendarContract.Events.DTSTART ; 因此,你可以改变PROJECTION到:

private static final String[] PROJECTION = {
        CalendarContract.Calendars._ID, // 0
        CalendarContract.Events.BEGIN, // 1
        CalendarContract.Events.END, // 2
        CalendarContract.Events.DISPLAY_COLOR, // 3
};

其原因在于:

  • Events.DTSTART返回start原来创建的事件的时间。 请注意,此事件是经常过去; 因此,它过滤掉。
  • Events.BEGIN回报启动事件的每个实例的时间。

查核在源CalendarEvent.java从我的github样本项目https://github.com/mtrung/android-WatchFace 。



文章来源: WearableCalendarContract query doesn't return recurring events