2013-06-11 3 views
4

Я много раз искал в Интернете и много примеров. Я могу успешно добавить событие в календарь через мое приложение, но я не могу удалить это событие программно. Вот образцы, которые я пробовал, что я не могу получить успешный результат.удаление события из календаря в андроиде программно

токены [1] - это идентификатор события.
1)

Uri eventsUri = Uri.parse(getCalendarUriBase()+"events"); 
    Uri eventUri = ContentUris.withAppendedId(eventsUri, Long.parseLong(tokens[1])); 
    getContentResolver().delete(eventUri, null, null); 

2)

ContentResolver cr = FlightOperationsCancelTicketFee.this.getContentResolver(); 
Uri EVENTS_URI = Uri.parse("content://com.android.calendar/" + "events"); 
deleteEvent(cr, EVENTS_URI, 1); 


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(); 
} 

3)

ContentResolver cr = getContentResolver(); 
String calUriString = "content://com.android.calendar/events"; 
Uri cal=Uri.parse(calUriString); 
String[] EVENT_PROJECTION=new String[]{"calendar_id","title","dtstart","_id"}; 


Uri eventsUri = Uri.parse(getCalendarUriBase()+"events"); 
Uri eventUri =ContentUris.withAppendedId(eventsUri, Long.parseLong(tokens[1])); 
String reminderUriString = "content://com.android.calendar/reminders"; 
Uri remUri =Uri.parse(reminderUriString); 
    cr.delete(remUri, "event_id="+Commons.event_id, null); 
cr.delete(eventUri, null, null); 

4)

Uri eventsUri = Uri.parse(getCalendarUriBase()+"events"); 
    Uri eventUri = ContentUris.withAppendedId(Events.CONTENT_URI, Long.parseLong(tokens[1])); 
    getContentResolver().delete(eventUri, null, null); 

Ни один из вышеперечисленных не работает. Мне нужна помощь . Спасибо .. Редактировать: Я думаю, что я не могу отправить правильный контекст, есть ли способ сохранить контекст с помощью общих настроек? Однако он сохраняет только значения String и Int. Есть ли другой способ сделать что-то подобное?

ответ

0

Лучшая документация по этому вопросу здесь: http://developer.android.com/guide/topics/providers/calendar-provider.html

Но ваш основном делает его книгой в (1).

Мое предложение - сначала убедиться, что у вас есть правильный идентификатор, второй тест на другом устройстве и т. Д. Также проверьте, можете ли вы снова получить событие после его удаления.

0

Вы должны добавить события к календарю с различным _id, так как calender_id действует как первичный ключ. Итак, если вы хотите, чтобы конкретная запись удалялась, просто дайте этому идентификатору команду delete.

2

Используйте этот код, он работал для меня:

Uri deleteUri = null; 
     deleteUri = ContentUris.withAppendedId(CalendarContract.Events.CONTENT_URI, Long.parseLong(String.valueOf(eventID))); 
     int rows = getContentResolver().delete(deleteUri, null, null); 
     Toast.makeText(this, "Event deleted", Toast.LENGTH_LONG).show(); 

 Смежные вопросы

  • Нет связанных вопросов^_^