删除并更新现有日历事件

Ore*_*reo 14 android calendar android-calendar

我正在遵循这个要点,进入insert事件Calendar

我如何update使用下面的代码插入我之前插入的日历事件:

public void addToCalender() throws ParseException {

        ......

        ContentValues event = new ContentValues();
        event.put(CalendarContract.Events.CALENDAR_ID, calendarId[0]);
        event.put(CalendarContract.Events.TITLE, "Event Title");
        event.put(CalendarContract.Events.DESCRIPTION, "Event Description");
        event.put(CalendarContract.Events.EVENT_LOCATION, "Eevnt Location");
        event.put(CalendarContract.Events.DTSTART, startCalTime);
        event.put(CalendarContract.Events.DTEND, endCalTime);
        event.put(CalendarContract.Events.STATUS, 1);
        event.put(CalendarContract.Events.HAS_ALARM, 1);
        event.put(CalendarContract.Events.EVENT_TIMEZONE, timeZone.getID());

        Uri insertEventUri = AddEventActivity.this.getContentResolver().insert(
                eventsUri, event);

        ContentValues reminders = new ContentValues();
        reminders.put(Reminders.EVENT_ID,
                Long.parseLong(insertEventUri.getLastPathSegment()));
        reminders.put(Reminders.METHOD, Reminders.METHOD_ALERT);
        reminders.put(Reminders.MINUTES, 10);

        AddEventActivity.this.getContentResolver().insert(remainderUri, reminders);
    }
Run Code Online (Sandbox Code Playgroud)

我想知道,我该怎么做:

1. Remove existing event

2. Update existing event
Run Code Online (Sandbox Code Playgroud)

小智 5

以下是修改事件的方法。假设它的 ID 是 eventID:

public void updateEvent(int eventID)
{
    ContentResolver cr = context.getContentResolver();
    Uri eventUri = ContentUris.withAppendedId(CalendarContract.Events.CONTENT_URI, eventID);
    ContentValues event = new ContentValues();
    event.put(CalendarContract.Events.TITLE, "new title");
    event.put(CalendarContract.Events.DESCRIPTION, "My cool event!");
    cr.update(eventUri, event, null, null);
}
Run Code Online (Sandbox Code Playgroud)

要删除事件,您有两种可能性:

如果您是标准应用程序:使用前面的代码并将所有 event.put 替换为以下代码:

event.put(CalendarContract.Events.DELETED, 1);

如果你是日历的SyncAdapter,想要真正的删除(前面的方法只是说要删除事件,接下来的方法必须在日历同步时使用:

public deleteEvent(Uri eventUri)
{
    cr.delete(event, null, null);
}
Run Code Online (Sandbox Code Playgroud)

其中 eventUri 是之前从事件 ID 中获取的事件的 Uri。

对于前面的所有方法,如果您收到有关不在同步适配器中的异常,您可以使用以下方法:

public static Uri asSyncAdapter(Uri uri, String account, String accountType)
{
    return uri.buildUpon()
            .appendQueryParameter(CalendarContract.CALLER_IS_SYNCADAPTER, "true")
            .appendQueryParameter(CalendarContract.Calendars.ACCOUNT_NAME, account)
            .appendQueryParameter(CalendarContract.Calendars.ACCOUNT_TYPE, accountType)
            .build();
}
Run Code Online (Sandbox Code Playgroud)

我希望这能帮到您。

来源:个人代码+ http://developer.android.com/guide/topics/providers/calendar-provider.html


小智 1

...
Outlook 实际上似乎响应RFC 2446中定义的规则

总之,你必须指定

METHOD:REQUESTORGANIZER:xxxxxxxx

...
请阅读汤姆·卡特的原始答案。