2015-04-10 1 views
1

Я создаю часы для Android Wear, которые будут отображать события календаря. На основании this page (и образца WatchFace, предоставленного в SDK), мне удалось запросить следующие события за день и отобразить их на моем часовом поясе (ниже приведен код, который я использую для запроса событий).WearableCalendarContract query не возвращает повторяющиеся события

Проблема в том, что повторяющиеся события не возвращаются в курсоре и, таким образом, не отображаются на циферблате. Есть ли какой-либо параметр для добавления в запрос для получения повторяющихся событий?

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

ответ

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 возвращает время начала каждого экземпляра события.

Исследуйте источник в CalendarEvent.java из моего проекта-примера github https://github.com/mtrung/android-WatchFace.