1

我正在使用本地日曆。這裏是我的代碼來創建一個事件:實例表在更新ExDate列後不會重新生成android CalendarProvider

ContentValues values = new ContentValues(); 
values.put(CalendarContract.Events.DTSTART, 1457926200000L); 
values.put(CalendarContract.Events.DURATION, "P3600S"); 
values.put(CalendarContract.Events.RRULE, "FREQ=DAILY;COUNT=2;WKST=SU"); 
values.put(CalendarContract.Events.EVENT_TIMEZONE, TimeZone.getDefault().getID()); 
values.put(CalendarContract.Events.CALENDAR_ID, 34); 
values.put(CalendarContract.Events.EXDATE, "20160314T033000Z"); 
values.put(CalendarContract.Events.TITLE, "R0"); 

Uri uri = getContentResolver().insert(CalendarContract.Events.CONTENT_URI, values); 

事件已正確插入而COUNT是2 RRULE,我看是因爲ExDate只是一個事件。但如果我刪除此行:

values.put(CalendarContract.Events.EXDATE, "20160314T033000Z"); 

而且更新插入事件:

ContentValues values = new ContentValues(); 
values.put(CalendarContract.Events.EXDATE, "20160314T033000Z"); 
int update = getContentResolver().update(ContentUris.withAppendedId(CalendarContract.Events.CONTENT_URI, 3612), values, null, null); 

事件更新成功(我懷疑該和ExDate正確更新)。但是我看到2個事件而不是一個,看起來ExDate不起作用。

我知道有可能使用original_idoriginal_instance_timeCONTENT_EXCEPTION_URI來插入異常。我想知道是否有其他方法可以做到這一點,而不是插入另一個事件?

感謝

回答

1

嘗試增加CalendarContract.Events.DTSTARTContentValues當你更新事件(請確保您傳遞原始值)。

正如您在CalendarInstancesHelper.java中所看到的,如果DTSTART不存在於修改的ContentValues中,則會跳過實例表更新。

+0

你說得對。除了'DTSTART',我還必須包含其他相關值('RRULE'和'DURATION')。有了這4個值,結果就OK了。非常感謝你。 –