Не удалось удалить напоминание из календаря на Android

Я добавил событие календаря программно, используя API-интерфейс caledarcontract, и получил идентификатор события. Точно так же я добавил напоминание об этом событии и сохранил напоминание. Теперь мне не нужно напоминание об этом событии (или я хотел бы отключить напоминание), поэтому я пытаюсь удалить напоминание, используя напоминание Id, но не могу удалить. Я также пытался удалить напоминание с помощью идентификатора события, но оно не работает.

public int AddEventToCalendar(String calendarId, Entity entity) {
    // TODO Auto-generated method stub
    ContentValues event = new ContentValues();
    event.put("calendar_id", calendarId);
    event.put("title", entity.description);
    event.put("dtstart", System.currentTimeMillis());
    event.put("dtend", System.currentTimeMillis() + 3600*1000);
    event.put("allDay", 0);
    //status: 0~ tentative; 1~ confirmed; 2~ canceled
    event.put("eventStatus", 1);
    //0~ default; 1~ confidential; 2~ private; 3~ public
    event.put("visibility", 0);
    //0~ opaque, no timing conflict is allowed; 1~ transparency, allow overlap of scheduling
    event.put("transparency", 0);
    //0~ false; 1~ true
    event.put("hasAlarm", 1);
    Uri add_eventUri;
    if (Build.VERSION.SDK_INT >= 8) {
        add_eventUri = Uri.parse("content://com.android.calendar/events");
    } else {
        add_eventUri = Uri.parse("content://calendar/events");
    }
    Uri l_uri = context.getContentResolver().insert(add_eventUri, event);
    if(l_uri != null)
    {
        long eventID = Long.parseLong(l_uri.getLastPathSegment());
        return (int) eventID;
    }
    else
        return 0;
}

public int AddReminderOnEvent(Entity entity)
{
    if(entity.eventId != 0)
    {
        ContentValues reminderValues = new ContentValues();
        reminderValues.put("event_id", entity.eventId);
        reminderValues.put("method", 1);// will alert the user with a reminder notification
        reminderValues.put("minutes", 0);// number of minutes before the start time of the event to fire a reminder
        Uri reminder_eventUri;
        if (Build.VERSION.SDK_INT >= 8) {
            reminder_eventUri = Uri.parse("content://com.android.calendar/reminders");
        } else {
            reminder_eventUri = Uri.parse("content://calendar/reminders");
        }
        Uri r_uri = context.getContentResolver().insert(reminder_eventUri, reminderValues); 
        if(r_uri != null)
        {
            long reminderID = Long.parseLong(r_uri.getLastPathSegment());
            return (int) reminderID;
//          Toast.makeText(getApplicationContext(), "Event Created Successfully", Toast.LENGTH_LONG).show();
        }
        else
            return 0;
    }
    else
    {
        return 0;
    }
}

    public boolean DeleteReminderOnTask(int eventId, int reminderId) {
    // TODO Auto-generated method stub

    Uri delete_reminderUri;
    if (Build.VERSION.SDK_INT >= 8) {
        delete_reminderUri = Uri.parse("content://com.android.calendar/reminders");
    } else {
        delete_reminderUri = Uri.parse("content://calendar/reminders");
    }
    delete_reminderUri = ContentUris.withAppendedId(delete_reminderUri, reminderId);
    int rows = context.getContentResolver().delete(delete_reminderUri,null , null);

    if(rows > 0)
        return true;
    else
        return false;

}

После выполнения этого кода каждый раз, когда строки возвращают 0, это означает, что строки не были изменены. И напоминание приходит точно в нужное время. Как удалить напоминание из календаря, не удаляя событие?


person Vansi    schedule 08.02.2012    source источник
comment
какое-либо исключение или ошибка при удалении?   -  person Tofeeq Ahmad    schedule 08.02.2012
comment
нет. нет ни ошибки, ни исключения. только количество измененных строк равно 0   -  person Vansi    schedule 08.02.2012
comment
я прошла по вашим ссылкам. вы пытаетесь сослаться на вставку, обновление и удаление событий. Эти функции очень хорошо работают для меня в случае событий. В случае напоминаний вставка работает, а удаление не работает. пожалуйста, предложите решение. Спасибо   -  person Vansi    schedule 09.02.2012
comment
может ли кто-нибудь помочь мне найти решение этой проблемы. Спасибо   -  person Vansi    schedule 24.02.2012
comment
У меня та же проблема. Я хочу обновить значение напоминания или удалить напоминание для своего события. Но никакого успеха. Вы нашли какое-то решение??   -  person Umer Abid    schedule 20.11.2012
comment
Я напрямую создал событие календаря через свое приложение, а также добавил напоминание. Они работают отлично. Но когда я нажимаю уведомление о напоминании, открывается событие календаря устройства. Теперь я хочу настроить напоминание для загрузки моего приложения без загрузки календаря по умолчанию. Могу ли я достичь этого?   -  person Nooruddin Lakhani    schedule 27.04.2016


Ответы (2)


Я не уверен, с какой версией SDK вы работаете при сбое, но этот код (который по сути такой же, как ваш, за исключением проверки версии) работает для меня:

Uri reminderUri = ContentUris.withAppendedId(
    CalendarContract.Reminders.CONTENT_URI, reminderId);
int rows = contentResolver.delete(reminderUri, null, null);

Я получил reminderId, запросив напоминания о мероприятии:

    String[] projection = new String[] {
            CalendarContract.Reminders._ID,
            CalendarContract.Reminders.METHOD,
            CalendarContract.Reminders.MINUTES
    };

    Cursor cursor = CalendarContract.Reminders.query(
        contentResolver, eventId, projection);
    while (cursor.moveToNext()) {
        long reminderId = cursor.getLong(0);
        int method = cursor.getInt(1);
        int minutes = cursor.getInt(2);

        // etc.

    }
    cursor.close();
person Eric Smith    schedule 02.05.2013

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

//What we want to update
ContentValues values = new ContentValues();
values.put(Events.HAS_ALARM, 0);

//We're setting the event to have no alarms
int result = getContentResolver().update(
    Events.CONTENT_URI,
    values,
    Events._ID + " = ?",
    new String[]{"44"}
);

К сожалению, это удаляет все напоминания, но я не уверен, что множественные напоминания действительно поддерживаются Android 14+ или большинством поставщиков календарей (например, Exchange). Приложение календаря в ICS позволяет добавить только одно напоминание (несмотря на надпись «Добавить напоминания»).

И если я использую другое приложение, такое как бизнес-календарь, для добавления нескольких напоминаний, когда я регистрируюсь в Exchange, оно показывает только одно напоминание. Он показывает несколько напоминаний в приложении календаря, но только на этом устройстве, а не на других устройствах, поэтому несколько напоминаний кажутся только локальными.

person Don Rhummy    schedule 26.02.2013