4

我有一个小型应用程序,其中一个功能包括为用户提供当前状态。这会显示给使用我们后端的其他用户,在某些情况下,还应该可以选择将状态与用户的日历同步。

我使用 ICS 日历 API:s 来执行此同步,它与 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);

当我尝试在电话日历中手动添加新项目时,它会与交换正确同步,因此似乎可行。但是从我的应用程序中,我很难让它工作。

4

1 回答 1

2

Calendars.OWNER_ACCOUNT在 ContentValues 中指定应该可以解决问题。

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);
于 2012-05-12T03:26:36.263 回答