当我创建 Google 日历事件并将扩展属性附加到它时,一切都按预期工作 - 事件及其扩展属性都得到同步,因此可以从不同的设备访问它们。这是代码:
// 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);
现在我想更新我的扩展属性,假设用“valueB”替换“valueA”,这就是我所做的:
// 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”。当我尝试将另一个扩展属性添加到同一事件时,我可以观察到相同的行为 - 我只能在当前设备上看到这两个扩展属性。新的扩展属性永远不会同步。
谁能帮助理解我做错了什么?我需要能够将多个扩展属性添加到事件以及稍后编辑这些属性。
PS 我可以将多个扩展属性附加到一个循环中的新事件,而不是附加一个初始扩展属性,它们都将在设备之间成功同步:
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);
}
因此,仅当我尝试更新现有属性或向已经具有“初始”扩展属性的事件添加(不是同时在循环中!)新属性时,才会出现同步问题。