2011-08-03 76 views
4

我想要做的只是刪除我在日曆中保存的內容,而不是我已經在日曆中顯示的所有內容..爲此,我使用以下代碼。但它會刪除calendar..so的所有內容誰能告訴我怎麼能防止..如何刪除日曆中的特定事件

Uri CALENDAR_URI = Uri.parse("content://calendar/events"); 
ContentResolver cr = getContentResolver(); 
cr.delete(CALENDAR_URI, null, null); // Delete all 



ContentValues values = new ContentValues(); 
values.put("calendar_id", 1); 
values.put("title", this.title); 
values.put("allDay", this.allDay); 
values.put("dtstart", this.dtstart.toMillis(false)); 
values.put("dtend", this.dtend.toMillis(false)); 
values.put("description", this.description); 
values.put("eventLocation", this.eventLocation); 
values.put("visibility", this.visibility); 
values.put("hasAlarm", this.hasAlarm); 

cr.insert(CALENDAR_URI, values); 

所以我想是隻刪除由我把那進入......

刪除事件

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

ContentResolver cr = c.getContentResolver(); 
deleteEvent(cr, EVENTS_URI, 1); 

private void deleteEvent(ContentResolver resolver, Uri eventsUri, int calendarId) { 
     Cursor cursor;  
     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(); 
    } 
+0

這將只工作,如果有安裝在手機上的默認日曆應用程序。 – st0le

+0

請使用Google日曆GData API操作用戶的Google日曆。 – CommonsWare

+0

@Andr你好我正面臨同樣的問題,你是如何解決這個問題的?任何建議將是非常有用的幫助我們... –

回答

4

閱讀從日曆數據後剛剛嘗試了這一點..

添加一個帶發生事件的日曆

爲一個條目添加到特定的日曆,我們需要配置日曆項插入使用ContentValues如下:

ContentValues event = new ContentValues(); 

每個事件都需要被綁定到特定的日曆,所以你會想設置的第一件事就是日曆插入此事件進入的標識:

event.put("calendar_id", calId); 

然後,我們設置了一些有關該事件的基本信息,包括字符串字段,如事件標題,描述和位置。

event.put("title", "Event Title"); 
event.put("description", "Event Desc"); 
event.put("eventLocation", "Event Location"); 

配置事件的時間和日期有許多不同的選項。

我們可以設置事件的開始和結束的信息如下:

long startTime = START_TIME_MS; 
long endTime = END_TIME_MS; 
event.put("dtstart", startTime); 
event.put("dtend", endTime); 

如果我們增加一個生日或節日,我們會設置的入口是一個全天事件:

event.put("allDay", 1); // 0 for false, 1 for true 

這些信息足以滿足大多數條目。但是,還有許多其他有用的日曆條目屬性。

例如,您可以設置事件狀態暫定(0),證實了(1)或取消(2):

event.put("eventStatus", 1); 

您可以控制誰可以通過設置它的可見性默認看到此事件(0),保密(1),私人(2),或公共(3):

event.put("visibility", 0); 

您可以控制一個事件是否消耗時間通過其透明度設置爲不透明(可以有時間衝突)上的日曆(0)或透明(1)。

event.put("transparency", 0); 

您可以控制如下事件是否觸發報警提醒:

事件。put(「hasAlarm」,1); // 0表示假,1爲真

一旦日曆事件配置正確,我們已經準備好使用ContentResolver插入日曆事件新的日曆進入相應的URI:

Uri eventsUri = Uri.parse("content://calendar/events"); 
    Uri url = getContentResolver().insert(eventsUri, event); 

對insert()方法的調用聯繫日曆內容提供者並嘗試將條目插入適當的用戶日曆中。如果您導航到日曆應用程序並啓動它,則應該在相應的日曆中看到您的日曆條目。由於日曆同步,因此如果您在網絡上使用Google日曆,則還會在線看到日曆條目。

刪除事件

private int DeleteCalendarEntry(int entryID) { 
     int iNumRowsDeleted = 0; 

     Uri eventsUri = Uri.parse(getCalendarUriBase()+"events"); 
     Uri eventUri = ContentUris.withAppendedId(eventsUri, entryID); 
     iNumRowsDeleted = getContentResolver().delete(eventUri, null, null); 

     Log.i(DEBUG_TAG, "Deleted " + iNumRowsDeleted + " calendar entry."); 

     return iNumRowsDeleted; 
    } 

而且通過這個link去刪除

+0

但刪除選項..實際插入完成,但現在當我試圖刪除由我的應用程序放置的內容..它會刪除內容,但也已在日曆中的所有內容 – AndroidDev

+0

@安士曼:我編輯了我的答案。看一看。 – Hussain

+0

你好我已經嘗試了你的代碼再次發生同樣的事情它刪除所有的日曆內容..這意味着它刪除由我的應用程序放置的內容,也是由其他內容.. – AndroidDev