2012-05-06 45 views
4

我有一個小應用程序,其中一個功能包括具有用戶的當前狀態。這會顯示給使用我們後端的其他用戶,並且在某些情況下,還應該有與用戶的日曆同步的選項。如何添加不成爲交換暫定會議的Android日曆事件?

我使用ICS日曆API:s來執行此同步,並且它適用於Google日曆。如果用戶選擇與交換賬戶同步,但狀態項顯示爲狀態爲暫定的會議請求。

因爲我對日曆的經驗有限,所以我的問題是應該與日曆事件一起使用的字段,以使其顯示爲交換中的常規事件以及Google日曆。我直接插入事件,而不使用意圖,因爲目標是爲了使用戶無縫。當前的代碼如下所示(狀態是我的狀態數據模型)。

ContentResolver cr = getContentResolver(); 
ContentValues values = new ContentValues(); 
values.put(CalendarContract.Events.DTSTART, status.StartTimeLocal.getTime()); 
values.put(CalendarContract.Events.DTEND, status.StopTimeLocal.getTime()); 
values.put(CalendarContract.Events.TITLE, status.DisplayName); 
values.put(CalendarContract.Events.DESCRIPTION, status.Text); 
values.put(CalendarContract.Events.AVAILABILITY, CalendarContract.Events.AVAILABILITY_BUSY); 
values.put(CalendarContract.Events.STATUS, CalendarContract.Events.STATUS_CONFIRMED); 
values.put(CalendarContract.Events.GUESTS_CAN_INVITE_OTHERS, false); 
values.put(CalendarContract.Events.HAS_ATTENDEE_DATA, false); 
values.put(CalendarContract.Events.CALENDAR_ID, mCalendarId); 
values.put(CalendarContract.Events.EVENT_TIMEZONE, "Europe/Stockholm"); 
Uri uri = cr.insert(CalendarContract.Events.CONTENT_URI, values); 

當我嘗試在它與交流能夠正常同步,因此似乎有可能在手機日曆中手動添加一個新的項目。但從我的應用程序,我很難讓它工作。

回答

2

在ContentValues中指定Calendars.OWNER_ACCOUNT應該有所斬斷。

ContentValues values = new ContentValues(); 
... 
values.put(Calendars.OWNER_ACCOUNT, ACCOUNT_NAME); 

之前插入,你CONTENT_URI需要包括ACCOUNT_NAME,並ACCOUNT_TYPE

Uri contentUri CalendarContract.Calendars.CONTENT_URI 
     .buildUpon() 
     .appendQueryParameter(Calendars.ACCOUNT_NAME, ACCOUNT_NAME) 
     .appendQueryParameter(Calendars.ACCOUNT_TYPE, "com.google") 
     .build(); 

現在插入:

Uri uri = cr.insert(contentUri, values); 
+0

我實施這個解決方案,因爲我不是從這樣的問題同步適配器,但來自常規應用程序。如果我從我的應用程序嘗試此操作,則會出現只允許同步適配器寫入所有者帳戶的錯誤。此外,這似乎指的是整個日曆(CalendarContract.Calendar)而不是事件(CalendarContract.Events)。 – BMB

+0

@BMB是否設法插入一個狀態設置爲從您的應用程序確認的事件? – Maragues

+0

不,我還沒有設法通過交換事件顯示爲暫定會議之外的事情。如果我找到解決方案,將在此更新。 – BMB

相關問題