日历事件问题

时间:2011-09-13 05:55:52

标签: android

实际上我遇到了一个大问题..我已经创建了一个应用程序,我可以在我的设备日历中保存事件。现在,当我在我的设备日历中保存我的应用程序中的新事件时,它将始终删除事件以前保存我的应用程序并保存一个新的事件等等所有工作正常..现在最大的问题是,删除它将删除设备日历中包含的事件的所有日历事件保存我的应用..所以我想要的是只删除我的应用程序从我的应用程序插入新事件而不是已经存在或由我在设备日历中直接分配的事件..所以任何人都可以请帮助我解决这个问题..我用于插入和删除的代码是..

    Resources res = c.getResources();

    Uri EVENTS_URI = Uri.parse("content://com.android.calendar/" + "events");

    Uri REMINDERS_URI = Uri.parse("content://com.android.calendar/" + "reminders");

    ContentResolver cr = c.getContentResolver();

    Uri uri= ContentUris.withAppendedId(EVENTS_URI, 1);
    deleteEvent(cr, Resources res = c.getResources();

    Uri EVENTS_URI = Uri.parse("content://com.android.calendar/" + "events");

    Uri REMINDERS_URI = Uri.parse("content://com.android.calendar/" + "reminders");

    ContentResolver cr = c.getContentResolver();

    //Deleting event from device calendar before saving new event
    deleteEvent(cr, EVENTS_URI, 1);

     //saving new data to calendar
    ContentValues values = new ContentValues();
    values.put("calendar_id", 1);
    values.put("title", str);
    values.put("description", m_strDescription);                    
    values.put("dtstart", cal.getTimeInMillis()); 
    values.put("dtend", cal.getTimeInMillis()); 
    values.put("hasAlarm", 1);
        Uri event = cr.insert(EVENTS_URI, values);

    values = new ContentValues();
    values.put("event_id", Long.parseLong(event.getLastPathSegment()));
    values.put("method", 1);
    values.put("minutes", 10);
    cr.insert(REMINDERS_URI, values);

删除活动的功能

private void deleteEvent(ContentResolver resolver, Uri eventsUri, int calendarId) 
{
    Cursor cursor;
    if (android.os.Build.VERSION.SDK_INT <= 7) 
    { 
        cursor = resolver.query(eventsUri, new String[]{ "_id" }, "Calendars_id=" + calendarId, null, null);
    } 
    else 
    { 
        cursor = resolver.query(eventsUri, new String[]{ "_id" }, "calendar_id=" + calendarId, null, null);
    }
    while(cursor.moveToNext()) 
    {
        long eventId = cursor.getLong(cursor.getColumnIndex("_id"));
        resolver.delete(ContentUris.withAppendedId(eventsUri, eventId), null, null);
    }
    cursor.close();
}

1 个答案:

答案 0 :(得分:2)

您正在使用的代码是删除每个事件:您需要保存您创建的事件的ID,并且只删除该事件。当你这样做时:

cr.insert(REMINDERS_URI, values);

将其更改为:

Uri u = cr.insert(REMINDERS_URI, values);

这将保存您创建的事件的URI。然后,您可以将该URI传递到deleteEvent方法中,仅删除该事件,而不是删除所有事件。