删除事件从日历不会被删除(Deleting events from Calendar not bei

2019-08-17 02:12发布

我试图让我的应用程序添加提醒用户的日历。 该代码将搜索titlestart date ,以检查事件的日历已经存在添加它(以免有重复)前。 我的问题是:如果我从日历中手动删除该事件(使用日历),该事件从日历(我看我所有的日历并不能看到它在日历应用程序),但不会从数据库中消失。 我不明白的一件事是,我试图以编程方式删除的事件,但他们仍然不会被删除。

这里是我的代码片段:

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

为什么事件仍然存在从日历应用程序删除它们后为什么我不能够,甚至编程方式删除呢?

更新问题是唯一的,如果我使用calendar_id=1的插入和删除。 其他calendar_id的工作的罚款。

更新2我测试了三星Galaxy S1的代码,它工作正常。 这似乎是在三星Galaxy S3的问题(在那里我有我的问题,我认为这是在S-规划者应用程序中的错误)

Answer 1:

如果它不是一个URI的问题,

你可以尝试选择字符串包括

AND (deleted != 1)

所以选择字符串变,

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

偶尔,有时CalendarDB花费要删除的事件。 但是,“删除”列将被标记为“1”,表示他们将尽快删除。 究其原因,延迟也许日历等待同步

PS:尝试使用此工具- http://www.cellobject.net/Tools/CellObjectSQLiteXMLBrowser.aspx以可视化的日历DB。 请检查为“删除”和“脏”在数据库列



Answer 2:

不同版本的Android的使用不同的URI路径用于查找日历数据。 例如,你可以使用Android 2.1及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";

在4.0中的不同的方法是优选的:

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

还有的是,银河S3至少有Android 4.0的就可以了很好的机会。 这种变化可以解释上的S1使用的代码,而不是S3。



Answer 3:

你也可以做这样的事情:

private boolean isEventInCal(Context context, String id) {
    Uri event = ContentUris.withAppendedId(CalendarContract.Events.CONTENT_URI, Long.parseLong(id));

    Cursor cursor = context.getContentResolver().query(event, null, null, null, null);
    if (cursor != null && cursor.getCount() == 1) {
        //the event exists?
        if (cursor.moveToFirst() && !TextUtils.equals(cursor.getString(cursor.getColumnIndex("deleted")), "1")) {

            cursor.close();
            return true;
        } else {
            return false;
        }
    }
    return false;
}

它适用于所有设备。



文章来源: Deleting events from Calendar not being deleted