La eliminación de eventos del calendario no se ha eliminado

Estoy intentando que mi aplicación agregue recordatorios al Calendario del usuario. El código busca el title y la start date para comprobar si el evento ya existe en el Calendario antes de añadirlo (para no tener duplicados). Mi problema es que: si elimino el evento del calendario manualmente (usando el calendario), el evento desaparece del calendario (estoy viendo todos mis calendarios y no puedo verlo en la aplicación de calendario) pero no de la base de datos. Otra cosa que no entiendo es que intenté quitar los acontecimientos programmatically, pero todavía no se quitan.

Aquí está mi fragmento de código:

 Cursor cur = null; 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"}; String selection = "((" + "calendar_id" + " = 1) AND (" + "title" + " LIKE '"+name+"') AND (" + "dtstart" + " = "+String.valueOf(c.getTimeInMillis())+"))"; cur = cr.query(cal, EVENT_PROJECTION, selection, null, null); boolean found=false; if(cur!=null) if(cur.moveToFirst()){ DatabaseUtils.dumpCursor(cur);/*Just to view my results (which always include the deleted events)*/ do{ if(cur.getString(1).equals(name)){ /*I use this part to try to remove the events manually*/ Uri eventUri =ContentUris.withAppendedId(cal, Long.valueOf(cur.getString(3))); String reminderUriString = "content://com.android.calendar/reminders"; Uri remUri =Uri.parse(reminderUriString); cr.delete(remUri, "event_id="+cur.getString(3), null); cr.delete(eventUri, null, null); /*It is not working also*/ Toast.makeText(getApplicationContext(), "Event already exists in Calendar", Toast.LENGTH_LONG).show(); found=true; //break; } }while(cur.moveToNext()); } cur.close(); if(found){ /*Event is found even if I remove it from the Calendar manually and even if I remove it programmatically using cr.delete()*/ } else{ values.put("calendar_id",1); /*I am using the same Calendar that I query, or is this wrong*/ values.put("title", name); /*More values are added*/ Uri calendarUri = cr.insert(cal, values); long eventID = Long.parseLong(calendarUri.getLastPathSegment()); String reminderUriString = "content://com.android.calendar/reminders"; ContentValues reminderValues = new ContentValues(); reminderValues.put("event_id", eventID); reminderValues.put("minutes", 5); reminderValues.put("method", 1); Uri reminderUri = getApplicationContext().getContentResolver().insert(Uri.parse(reminderUriString), reminderValues); } 

¿Por qué siguen presentes los sucesos después de eliminarlos de la aplicación de calendario y por qué no puedo eliminarlos incluso mediante programación?

Actualización El problema es sólo si uso calendar_id=1 para insertar y eliminar. Otros calendar_id s funcionan bien.

Actualización 2 He probado el código en Samsung Galaxy S1 y está funcionando bien. Parece ser un problema en Samsung Galaxy S3 (donde tengo mi problema, creo que es un error en la aplicación S-planner)

Si no es un problema URI,

¿Puedes intentar incluir en la cadena de selección

 AND (deleted != 1) 

Por lo que la cadena de selección se convierte,

 String selection = "((" + "calendar_id" + " = 1) AND (" + "title" + " LIKE '"+name+"') AND (" + "dtstart" + " = "+String.valueOf(c.getTimeInMillis())+") AND ( deleted != 1 ) )"; 

Ocasionalmente, el CalendarDB toma algún tiempo para que los eventos se eliminen. Pero la COLUMNA "borrada" se marcará como "1", indicando que se borrarán pronto. El motivo del retraso tal vez el calendario está a la espera de sincronizarse

Ps: Intente usar esta herramienta – http://www.cellobject.net/Tools/CellObjectSQLiteXMLBrowser.aspx para visualizar el DB de calendario. Compruebe las columnas "suprimidas" y "sucias" en el db

Diferentes versiones de android utilizan diferentes rutas URI para buscar datos de calendario. Por ejemplo, puede utilizar las siguientes constantes para android 2.1 y 2.2:

 private static final String URI_VERSION_2_1 = "content://calendar/events"; private static final String URI_VERSION_2_2 = "content://com.android.calendar/events"; 

En 4.0 se prefiere un método diferente:

http://android-developers.blogspot.com/2011/10/ics-and-non-public-apis.html http://developer.android.com/reference/android/provider/CalendarContract.Events.html

Hay una buena probabilidad de que el Galaxy S3 tiene al menos Android 4.0 en él. Este cambio puede explicar el código que trabaja en un S1, pero no en un S3.

  • Inserción de elementos de calendario en Android ICS
  • ¿Cómo crear un calendario personalizado con la gestión de eventos?
  • Inicialice la fecha en android datepicker a una fecha específica, que no es la fecha actual.
  • Calendario y PagerAdapter - Vistas ilimitadas
  • En Java, cómo obtener cadenas de días de la semana (Sun, Mon, ..., Sat) con el sistema de configuración por defecto (idioma)
  • Problema con Calendar.get (Calendar.HOUR)
  • Calendario de Android Java getDisplayName / s devolver null
  • Vista del Calendario de Android para el selector de fechas
  • Android: la eliminación de una ocurrencia de evento elimina todo su ocurrencia
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.