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);
ここで、拡張プロパティを更新したいと思います。たとえば、「valueA」を「valueB」に置き換えます。次のようにします。
// 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);
}
したがって、同期の問題は、既存のプロパティを更新しようとしたり、(ループで同時にではなく) 新しいプロパティを「初期」拡張プロパティが既にあるイベントに追加しようとした場合にのみ発生します。