Когда я создаю событие Календаря Google и прикрепляю к нему расширенное свойство, все работает как ожидается - синхронизируются как событие, так и его расширенное свойство поэтому к ним можно получить доступ с разных устройств. Вот код:Поставщик календаря для Android: только изначально созданных расширенных свойств синхронизаций между устройствами, все последующие обновления не синхронизируются
// create event with extended property
ContentValues values = new ContentValues();
...
values.put(CalendarContract.Events.HAS_EXTENDED_PROPERTIES, 1);
Uri eventURI = contentResolver.insert(CalendarContract.Events.CONTENT_URI, values);
long eventID = Long.parseLong(eventURI.getLastPathSegment());
Uri extendedPropertyURI = CalendarContract.ExtendedProperties.CONTENT_URI;
extendedPropertyURI = extendedPropertyURI.buildUpon()
.appendQueryParameter(CalendarContract.CALLER_IS_SYNCADAPTER, "true")
.appendQueryParameter(CalendarContract.Events.ACCOUNT_NAME, "...")
.appendQueryParameter(CalendarContract.Events.ACCOUNT_TYPE, "com.google").build();
ContentValues extendedValues = new ContentValues();
extendedValues.put(CalendarContract.ExtendedProperties.EVENT_ID, eventID);
extendedValues.put(CalendarContract.ExtendedProperties.NAME, "name");
extendedValues.put(CalendarContract.ExtendedProperties.VALUE, "valueA");
contentResolver.insert(extendedPropertyURI, extendedValues);
Теперь я хочу, чтобы обновить свою расширенную собственность, скажем, заменить «значение а» с «VALUE млрд», вот что я делаю:
// update extended property
int propertyID = 123; // got this ID from CalendarContract.ExtendedProperties._ID, let me omit the code
ContentValues updatedValues = new ContentValues();
updatedValues.put(CalendarContract.ExtendedProperties.VALUE, "valueB");
Uri updateUri = ContentUris.withAppendedId(extendedPropertyURI, propertyID);
contentResolver.update(updateUri, updatedValues, null, null);
расширенное значение свойства получает обновлено успешно, я вижу «valueB» на устройстве, где было выполнено обновление. Но он никогда не синхронизируется с сервером календаря Google, поэтому на других устройствах всегда отображается «valueA». Я могу наблюдать такое же поведение, когда я пытаюсь добавить другое расширенное свойство в одно и то же событие - я могу видеть только расширенные свойства только для текущего устройства. Новое расширенное свойство никогда не синхронизируется.
Может кто-нибудь может помочь понять, что я делаю неправильно? Мне нужно иметь возможность добавлять несколько дополнительных свойств в событие, а также редактировать эти свойства позже.
P.S. Вместо того, чтобы присоединять один единственное первоначальное расширенное свойство, я мог бы подключить несколько расширенных свойства нового события в цикле, все они будут синхронизированы на все устройства успешно:
for (int i = 0; i < 10; i ++) {
ContentValues extendedValues = new ContentValues();
extendedValues.put(CalendarContract.ExtendedProperties.EVENT_ID, eventID);
extendedValues.put(CalendarContract.ExtendedProperties.NAME, "name");
extendedValues.put(CalendarContract.ExtendedProperties.VALUE, "value" + i);
contentResolver.insert(extendedPropertyURI, extendedValues);
}
Так что вопрос синхронизации происходит только когда я пытаюсь обновить существующее свойство или добавить (не в то же время в цикл!) новое свойство события, которое уже имеет «начальные» расширенные свойства.
Помогает ли это? Http: // StackOverflow.com/questions/27293675/why-calendarprovider-doesnt-allow-writting-extendedproperties – luc
Нет. Такое же поведение, когда я использую «настоящий» адаптер синхронизации: только начальные расширенные свойства, все дальнейшие действия (добавление, обновление, удаление) происходят на только для текущего устройства. – Zmiter