Ich versuche, meiner App Erinnerungen an den Kalender des Benutzers hinzuzufügen. Der Code sucht nach title
und start date
, um zu überprüfen, ob das Ereignis bereits im Kalender vorhanden ist, bevor es hinzugefügt wird (um keine Duplikate zu erhalten). Mein Problem ist folgendes: Wenn ich das Ereignis manuell aus dem Kalender entferne (mit dem Kalender), verschwindet das Ereignis aus dem Kalender (ich sehe alle meine Kalender und kann es nicht in der Kalenderanwendung sehen), aber nicht aus der Datenbank. Eine andere Sache, die ich nicht verstehe, ist, dass ich versucht habe, die Ereignisse programmgesteuert zu entfernen, aber sie werden trotzdem nicht entfernt.Löschen von Ereignissen aus dem Kalender, die nicht gelöscht werden
Hier ist mein Code-Schnipsel:
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);
}
Warum sind die Ereignisse noch vorhanden, nachdem sie aus der Kalender-Anwendung zu entfernen und warum bin ich es zu entfernen, auch programmatisch nicht in der Lage?
aktualisieren Das Problem ist nur, wenn ich calendar_id=1
zum Einfügen und Löschen verwenden. Andere calendar_id
s funktionieren gut.
Update 2 Ich habe den Code auf Samsung Galaxy S1 getestet und es funktioniert gut. Es scheint ein Problem in Samsung Galaxy S3 zu sein (wo ich mein Problem habe, ich denke, es ist ein Fehler in der S-Planer App)
Wenn Sie Ihre App neu starten, werden die gelöschten Ereignisse weiterhin angezeigt? – NathanTempelman
Ja, auch wenn ich das Telefon neu starte, erscheinen sie nicht in der Kalender-App, erscheinen aber immer noch im ContentResolver.query() –
@Mohamed_AbdAllah Ich kann nicht sicher sagen, ob das der Fall ist, aber ähnliche Probleme können bei der Abfrage von Genres und Musik gesehen werden. Sie müssen herausfinden, ob es ein Bug ist =/ – Warpzit