【问题标题】:Android : Deleting an occurrence of event deletes all of its occurrenceAndroid:删除事件的发生会删除其所有发生
【发布时间】:2014-11-20 10:10:06
【问题描述】:

我知道,我不是第一个问这个的人。我在堆栈本身中发现了许多问题,例如

Delete only one instance of a recurring event from my Android calendar

Android Calendar Provider exception on recurring events

Android Calendar Specific Event Deletion

以上都没有解决问题。现在到我的代码。

我正在为所有操作使用日历合同提供程序 api(不需要支持旧的 android 版本)。及其不是同步适配器
我们成功删除了所有事件(通过从事件表本身中删除事件)。
但是当我尝试使用 Events.CONTENT_EXCEPTION_URI(通过插入)删除事件发生时,所有事件都消失了。以下是我的代码

 ContentValues args = new ContentValues();

        args.put(Events.TITLE,  eNote.getEventTitle());       
        args.put(Events.DTSTART,  eNote.getStartTimeMill());       
        args.put(CalendarContract.Events.ORIGINAL_INSTANCE_TIME, eNote.getStartTimeMill());
        args.put(Events.ORIGINAL_SYNC_ID, 1);
        args.put(Events.HAS_ALARM, "0");
        args.put(Events.HAS_ATTENDEE_DATA,"0");            
        args.put(CalendarContract.Events.EVENT_TIMEZONE, eNote.getTimeZone());
        args.put(CalendarContract.Events.STATUS, CalendarContract.Events.STATUS_CANCELED);


        Uri.Builder eventUriBuilder = CalendarContract.Events.CONTENT_EXCEPTION_URI.buildUpon();
        ContentUris.appendId(eventUriBuilder, eventID);

        try {

            final Uri resultUri = activity.getContentResolver().insert(eventUriBuilder.build(), args);
            int eventIDNew = Integer.parseInt(resultUri.getLastPathSegment());
            Log.i(Global.DEBUG_TAG,"eventIDNew  : " +eventIDNew);


        } catch (Exception e) {
            e.printStackTrace();
            Log.i(Global.DEBUG_TAG,
                    "Eroor  : " +e.getMessage() );
        } 
  • eNote 是一个对象,用于存储实例表中事件的详细信息,

  • 给定值 args.put(Events.ORIGINAL_SYNC_ID, 1);直接,因为我在创建事件时没有设置同步 ID,我们不需要任何同步操作

插入异常 uri 会返回一个新 ID,但这会使所有事件消失。

代码有什么问题.. 请帮助我们,我们欢迎所有的建议和提前感谢所有...

【问题讨论】:

  • stackoverflow.com/questions/10462095/… 其中一个答案提供了一个可能的(未经测试的)解决方案。您必须创建一个异常事件。
  • @Emile 感谢您的回复,我已经看到了一个并遵循相同的方式,但它会导致删除所有发生或一个月的事件。有时它的行为就像删除后不会从实例表返回任何事件,但几分钟后它会在事件被正确删除时正确返回事件(但删除后不会立即返回任何事件)..请分享您的任何想法..这对我来说将是一个非常巨大的帮助....
  • 要删除一个事件,您需要更新 EXDATE 字段。在您的代码中,您需要删除“CalendarContract.Events.STATUS, CalendarContract.Events.STATUS_CANCELED”stackoverflow.com/questions/17289153/…
  • 恐怕我自己不必这样做,但有更多链接供参考。 stackoverflow.com/questions/14522393/…
  • @Emile 我试过一次,在这种情况下,在三星 Galaxy Duos 设备日历中删除该状态,通风口在删除的日子被列为分隔事件(意味着创建了例外但仍显示事件)。对于第二个链接,我阅读了一些我们不需要插入到 exdate 的地方,因为它是由 Events.ExceptionURI 本身处理的。但是我会手动尝试那个...我非常感谢为了您的支持...

标签: android calendar android-calendar


【解决方案1】:

这里是基础知识(我已经回答了here

  1. 找到要删除的实例。 (使用Instances.query()
  2. 使用事件 ID appended 创建exception URI
  3. 创建ContentValues。将您的实例的BEGIN 值设置为...Events.ORIGINAL_INSTANCE_TIME。将STATUS_CANCELED 设为...Events.STATUS
  4. 现在只有insert(yourURI, yourValues),就是这样!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-02
    • 1970-01-01
    • 2018-05-27
    • 1970-01-01
    相关资源
    最近更新 更多