Как удалить конкретное событие в календаре

Что я хочу сделать, так это удалить только тот контент, который я сохранил в календаре, а не весь контент, который уже присутствует в календаре. Для этого я использую следующий код. Но это удалит все содержимое календаря. Так может ли кто-нибудь сказать мне, как это можно предотвратить?

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

person AndroidDev    schedule 03.08.2011    source источник
comment
Это будет работать только в том случае, если на телефоне установлено приложение «Календарь» по умолчанию.   -  person st0le    schedule 03.08.2011
comment
Пожалуйста, используйте API GData Календаря Google для управления Календарем Google пользователя.   -  person CommonsWare    schedule 03.08.2011
comment
@Andr Привет, я столкнулся с той же проблемой, как вы решили проблему ... Любые предложения будут очень полезны для нас ...   -  person Renjith K N    schedule 20.11.2014


Ответы (1)


После прочтения данных из календаря просто попробуйте это.

Добавление единичного события в календарь

Чтобы добавить запись в определенный календарь, нам нужно настроить запись календаря для вставки с использованием 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);

Вы можете управлять тем, вызывает ли событие сигнал напоминания, следующим образом:

event.put("с тревогой", 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;
    }

Также перейдите по этой ссылке для удаления

person Hussain    schedule 03.08.2011
comment
а как насчет опции удаления... на самом деле вставка выполнена, но теперь, когда я попытался удалить контент, размещенный моим приложением... он удалит контент, а также весь контент, который уже есть в календаре - person AndroidDev; 03.08.2011
comment
да, я снова попробовал ваш код, и произошло то же самое, он удалил все содержимое календаря. - person AndroidDev; 03.08.2011
comment
я отправляю вам свой обновленный код для удаления, пожалуйста, проверьте его .. почему это происходит .. мне нужно удалить только те вещи, которые установлены моим приложением в календаре устройства - person AndroidDev; 03.08.2011
comment
Извините, человек :(, я просто знаю эти вещи в событиях календаря. Я не использовал больше, чем это. Я думаю, вы можете использовать это и построить свой код. - person Hussain; 03.08.2011