如何添加未成为暂定会议的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);

当我尝试在手机日历中手动添加新项目时,它与交换正确同步,因此似乎可能.但是从我的应用程序中我很难让它运行起来.

最佳答案 在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);
点赞