WearableCalendarContract查询不会返回重复发生的事件

时间:2015-04-10 15:20:01

标签: android wear-os android-calendar

我正在为Android Wear创建一个表盘,它将显示日历事件。基于this page(以及SDK中提供的WatchFace示例),我设法查询当天的下一个事件,并将其显示在我的表盘上(下面是我用来查询事件的代码)。

问题是光标中不会返回重复出现的事件,因此不会在表盘上显示。是否要在查询中添加任何参数以获取重复发生的事件?

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;
}

1 个答案:

答案 0 :(得分:4)

您必须使用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返回原始创建事件的开始时间。请注意,此事件通常是过去的事情;因此,它被过滤掉了。
  • Events.BEGIN返回每个事件实例的开始时间。

从我的github示例项目CalendarEvent.java中查看https://github.com/mtrung/android-WatchFace中的来源。