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

标签 java android android-calendar

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

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

最佳答案

从 Calendar 中读取数据后试试这个..

将单次事件添加到日历

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

ContentValues event = new ContentValues();

每个事件都需要绑定(bind)到特定的日历,因此您要设置的第一件事是要将此事件插入到的日历的标识符:

event.put("calendar_id", calId);

然后我们设置一些关于事件的基本信息,包括事件标题、描述和位置等字符串字段。

event.put("title", "Event Title");
event.put("description", "Event Desc");
event.put("eventLocation", "Event Location");

有许多不同的选项可用于配置事件的时间和日期。

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

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):

event.put("eventStatus", 1);

您可以通过将其可见性设置为默认 (0)、 secret (1)、私有(private) (2) 或公开 (3) 来控制谁可以看到此事件:

event.put("visibility", 0);

您可以通过将日历的透明度设置为不透明 (0) 或透明 (1) 来控制事件是否消耗时间(可能有日程冲突)。

event.put("transparency", 0);

您可以控制事件是否触发提醒警报,如下所示:

event.put("hasAlarm", 1);//0 为假,1 为真

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

 Uri eventsUri = Uri.parse("content://calendar/events");
  Uri url = getContentResolver().insert(eventsUri, event);

对 insert() 方法的调用联系日历内容提供者并尝试将条目插入到适当的用户日历中。如果您导航到日历应用程序并启动它,您应该会在相应的日历中看到您的日历条目。由于日历同步,如果您在网络上使用 Google 日历,您还会在线看到日历条目。

删除事件

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

也通过这个link用于删除

关于java - 如何删除日历中的特定事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6924438/

相关文章:

java - 使用 Android 日历的 setMinDate() 时出现 StackOverflowError

android - 在日历 View 中添加文本

java - 无法显示 GWT DataGrid

java - 使用 QShell 停止 AS400 上的守护线程

java - 如何导出递归函数支持的最高递归级别的计数?

java - XML 解析 Java (Android)

android - 使用带有联系人电话号码的自动完成 TextView

java - 如何从 TCP 服务器向 TCP 客户端发送回复?

android - 如何以编程方式在 Android 设备上处理 "install"文件

android - 启动日历 Activity