Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/202.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何删除日历中的特定事件_Java_Android_Android Calendar - Fatal编程技术网

Java 如何删除日历中的特定事件

Java 如何删除日历中的特定事件,java,android,android-calendar,Java,Android,Android Calendar,我想做的是只删除我在日历中保存的内容,而不是日历中已经存在的所有内容。为此,我使用以下代码。但它将删除日历中的所有内容。那么,有谁能告诉我如何预防这种情况 Uri CALENDAR_URI = Uri.parse("content://calendar/events"); ContentResolver cr = getContentResolver(); cr.delete(CALENDAR_URI, null, null); // Delete all Conten

我想做的是只删除我在日历中保存的内容,而不是日历中已经存在的所有内容。为此,我使用以下代码。但它将删除日历中的所有内容。那么,有谁能告诉我如何预防这种情况

Uri CALENDAR_URI = Uri.parse("content://calendar/events");
ContentResolver cr = getContentResolver();
cr.delete(CALENDAR_URI, null, null); // Delete all



ContentValues values = new ContentValues();
values.put("calendar_id", 1);
values.put("title", this.title);
values.put("allDay", this.allDay);
values.put("dtstart", this.dtstart.toMillis(false));
values.put("dtend", this.dtend.toMillis(false));
values.put("description", this.description);
values.put("eventLocation", this.eventLocation);
values.put("visibility", this.visibility);
values.put("hasAlarm", this.hasAlarm);

cr.insert(CALENDAR_URI, values);
所以我只想删除我放的条目

删除事件

Uri EVENTS_URI = Uri.parse("content://com.android.calendar/" + "events");
            
ContentResolver cr = c.getContentResolver();
deleteEvent(cr, EVENTS_URI, 1);

private void deleteEvent(ContentResolver resolver, Uri eventsUri, int calendarId) {
        Cursor cursor;     
        cursor = resolver.query(eventsUri, new String[]{ "_id" },     "calendar_id=" + calendarId, null, null);
        while(cursor.moveToNext()) {
            long eventId = cursor.getLong(cursor.getColumnIndex("_id"));
            resolver.delete(ContentUris.withAppendedId(eventsUri, eventId), null, null);
        }
        cursor.close();
    }
 private int DeleteCalendarEntry(int entryID) {
        int iNumRowsDeleted = 0;

        Uri eventsUri = Uri.parse(getCalendarUriBase()+"events");
        Uri eventUri = ContentUris.withAppendedId(eventsUri, entryID);
        iNumRowsDeleted = getContentResolver().delete(eventUri, null, null);

        Log.i(DEBUG_TAG, "Deleted " + iNumRowsDeleted + " calendar entry.");

        return iNumRowsDeleted;
    }

从日历中读取数据后,请尝试此操作

将单个事件添加到日历

要向特定日历添加条目,我们需要使用ContentValues配置要插入的日历条目,如下所示:

ContentValues event = new ContentValues();
long startTime = START_TIME_MS;
long endTime = END_TIME_MS;
event.put("dtstart", startTime);
event.put("dtend", endTime);
每个事件都需要绑定到特定的日历,因此您首先要设置的是要将此事件插入的日历的标识符:

event.put("calendar_id", calId);
然后,我们设置有关事件的一些基本信息,包括字符串字段,如事件标题、描述和位置

event.put("title", "Event Title");
event.put("description", "Event Desc");
event.put("eventLocation", "Event Location");
有许多不同的选项可用于配置事件的时间和日期

我们可以如下设置事件开始和结束信息:

ContentValues event = new ContentValues();
long startTime = START_TIME_MS;
long endTime = END_TIME_MS;
event.put("dtstart", startTime);
event.put("dtend", endTime);
如果我们要添加生日或假日,我们会将条目设置为全天活动:

event.put("allDay", 1);   // 0 for false, 1 for true
对于大多数条目,此信息已足够。但是,还有许多其他有用的日历条目属性

例如,您可以将事件状态设置为暂定(0)、已确认(1)或已取消(2):

通过将此事件的可见性设置为默认(0)、机密(1)、私有(2)或公共(3),可以控制可以查看此事件的人员:

通过将事件的透明度设置为“不透明”(0)或“透明”(1),可以控制事件是否会占用日历上的时间(可能存在日程冲突)

您可以按如下方式控制事件是否触发提醒警报:

ContentValues event = new ContentValues();
long startTime = START_TIME_MS;
long endTime = END_TIME_MS;
event.put("dtstart", startTime);
event.put("dtend", endTime);
事件。放置(“hasAlarm”,1);//0表示假,1表示真

一旦日历事件配置正确,我们就可以使用
ContentResolver
将新的日历条目插入到日历事件的相应Uri中:

 Uri eventsUri = Uri.parse("content://calendar/events");
  Uri url = getContentResolver().insert(eventsUri, event);
对insert()方法的调用会联系日历内容提供程序,并尝试将条目插入相应的用户日历。如果导航到日历应用程序并启动它,则应在相应的日历中看到日历条目。由于日历同步,如果您在网上使用谷歌日历,您还可以在线看到日历条目

删除事件

Uri EVENTS_URI = Uri.parse("content://com.android.calendar/" + "events");
            
ContentResolver cr = c.getContentResolver();
deleteEvent(cr, EVENTS_URI, 1);

private void deleteEvent(ContentResolver resolver, Uri eventsUri, int calendarId) {
        Cursor cursor;     
        cursor = resolver.query(eventsUri, new String[]{ "_id" },     "calendar_id=" + calendarId, null, null);
        while(cursor.moveToNext()) {
            long eventId = cursor.getLong(cursor.getColumnIndex("_id"));
            resolver.delete(ContentUris.withAppendedId(eventsUri, eventId), null, null);
        }
        cursor.close();
    }
 private int DeleteCalendarEntry(int entryID) {
        int iNumRowsDeleted = 0;

        Uri eventsUri = Uri.parse(getCalendarUriBase()+"events");
        Uri eventUri = ContentUris.withAppendedId(eventsUri, entryID);
        iNumRowsDeleted = getContentResolver().delete(eventUri, null, null);

        Log.i(DEBUG_TAG, "Deleted " + iNumRowsDeleted + " calendar entry.");

        return iNumRowsDeleted;
    }

删除时也要检查此操作

只有在手机上安装了默认日历应用程序时,此操作才有效。请使用Google Calendar GData API操作用户的Google日历。@Andr Hi,我也面临同样的问题,你是如何解决这个问题的…任何建议都会对我们非常有帮助…但是删除选项呢..实际上插入已经完成,但是现在我尝试删除我的应用程序放置的内容..它会删除内容,但也会删除日历中已经存在的所有内容是的,我再次尝试了你的代码同样的事情发生了吗删除日历中的所有内容..这意味着它将删除我的应用程序放置的内容以及其他应用程序放置的内容..我将向您发送我的更新代码以删除您请检查..为什么会发生..我只需要删除我的应用程序在设备日历中设置的那些内容:(,我只知道日历事件中的这些事情。我用的不只是这些。我想你可以利用这些来构建你的代码。