es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo puedo eliminar un evento del calendario en Android >= 8?

He intentado muchas cosas, leí muchos posts en SO al respecto pero no puedo hacerlo.
Quiero eliminar todos los eventos.
Así es como agrego mis eventos de calendario:

            ContentResolver cr = Objects.requireNonNull(myContext.getContentResolver());
        ContentValues values = new ContentValues();
        values.put(CalendarContract.Events.DTSTART, myEventCalendar.getStartEvent());
        values.put(CalendarContract.Events.DTEND, myEventCalendar.getEndEvent());
        values.put(CalendarContract.Events.TITLE, myEventCalendar.getTitle());
        values.put(CalendarContract.Events.DESCRIPTION, myEventCalendar.getDescription());
        values.put(CalendarContract.Events.CALENDAR_ID, 1);
        values.put(CalendarContract.Events.EVENT_TIMEZONE, TimeZone.getDefault().getID());
        Uri uri = cr.insert(CalendarContract.Events.CONTENT_URI, values);

Este método funciona muy bien, pero no puedo eliminar los eventos después. Aquí está mi código:

@RequiresApi(api = Build.VERSION_CODES.O)

public void deleteEventCalendar(Context myContext) {
Uri deleteUri = null;
Cursor cursor = myContext.getContentResolver().query(CalendarContract.Calendars.CONTENT_URI, null, null, null, null);
while (cursor.moveToNext()) {
long id = cursor.getLong(cursor.getColumnIndexOrThrow(CalendarContract.Events._ID));
deleteUri = ContentUris.withAppendedId(CalendarContract.Events.CONTENT_URI, id);
myContext.getContentResolver().delete(deleteUri, null, null);
}
cursor.close();
}

Siento que no estoy tan lejos, pero todavía es imposible. Por favor, ayúdeme.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Parece que tienes el código correcto para insertar eventos en el calendario, pero te faltan algunos parámetros para eliminar los eventos. Necesitas especificar el CalendarContract.Events._ID al eliminar los eventos. Puedes hacer esto recorriendo el objeto Cursor y obteniendo el valor de _ID para cada evento. Luego puedes usar el método ContentUris.withAppendedId() para crear la Uri del evento y pasarla al método ContentResolver.delete().

    Aquí tienes un ejemplo de cómo puedes hacerlo:

    @RequiresApi(api = Build.VERSION_CODES.O)
    public void deleteEventCalendar(Context myContext) {
        Uri deleteUri = null;
        Cursor cursor = myContext.getContentResolver().query(CalendarContract.Calendars.CONTENT_URI, null, null, null, null);
        while (cursor.moveToNext()) {
            long id = cursor.getLong(cursor.getColumnIndexOrThrow(CalendarContract.Events._ID));
            deleteUri = ContentUris.withAppendedId(CalendarContract.Events.CONTENT_URI, id);
            myContext.getContentResolver().delete(deleteUri, null, null);
        }
        cursor.close();
    }
    

Comments are closed.