Android CalendarContract, удаление повторяющегося события приводит к исчезновению всех событий в календаре?

У меня есть адаптер синхронизации, который обрабатывает синхронизацию календарей и событий. Я могу удалить обычные события нормально. Но всякий раз, когда я удаляю повторяющееся событие, все события в моем календаре исчезают.

Я заметил одну вещь: всякий раз, когда я удаляю повторяющееся событие, таблица Instances очищается, что объясняет исчезновение событий. Таблица Events, как и ожидалось, с удаленной строкой повторяющегося события из таблицы.

Чем это вызвано?

Я пробовал удалить одним из следующих способов:

resolver.delete(
    ContentUris.withAppendedId(Events.CONTENT_URI, id),
    null,
    null
);

resolver.delete(
    Events.CONTENT_URI,
    Events._ID + " = ?",
    new String[]{id}
);

А также как SyncAdapter:

resolver.delete(
    Events.CONTENT_URI.buildUpon()
    .appendQueryParameter(CalendarContract.CALLER_IS_SYNCADAPTER, "true")
    .appendQueryParameter(Calendars.ACCOUNT_NAME, account.name)
    .appendQueryParameter(Calendars.ACCOUNT_TYPE, account.type)
    .build(),
    Events._ID + " = ?",
    new String[]{id}
);

Все методы корректно работают с неповторяющимися событиями, но все они вызывают очистку Instances таблицы при удалении повторяющегося события.

Обновить

Я заметил одну вещь: LogCat выдает следующую ошибку

  • Применение: system_process
  • Тег: BufferQueue
  • PID: 1187
  • TID: 1518

[com.android.calendar/com.android.calendar.AllInOneActivity] BufferQueue:drainQueueLocked: timeout waiting on consumer!


comment
Как вы решили эту проблему? Знает ли Google об этом?   -  person Christopher Masser    schedule 08.06.2013
comment
@ChristopherMasser Привет, Кристофер, я решил проблему. Извините за поздний ответ. Смотрите мое решение в ответах.   -  person penguin egg    schedule 11.06.2013


Ответы (1)


Это оказалось моей ошибкой. Когда мой SyncAdapter добавлял календари в базу данных, я неправильно устанавливал поле SYNC_EVENTS (http://developer.android.com/reference/android/provider/CalendarContract.CalendarColumns.html#SYNC_EVENTS). В частности, это поле должно быть установлено на 1.

Было трудно понять, что это была проблема, потому что я все еще мог технически «синхронизировать» (отправлять события на сервер и получать события с сервера), но я просто столкнулся с проблемой, когда мои события исчезали.

Надеюсь, это поможет и кому-то другому.

person penguin egg    schedule 11.06.2013