微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

android – 通过events.dtend更新日历instances.end

当我更新CalendarContract.Events DTEND列时,为什么更改不会显示在CalendarContract.Instances END列中?

我的应用程序允许用户使用CalendarContract.Events API查看和更改日历事件.代码执行Events表的更新,然后使用Instances表将其读回(稍后).例如,对TITLE的更改工作正常(即,我更新事件并可以回读实例中的更改).对Events.DTEND的更改确实显示在Instances.DTEND中,但是如何让该更新也显示在Instances.END中?

这很重要,因为很明显,Android日历应用程序(以及我的应用程序)也使用Instances.BEGIN和Instances.END来确定要在日历中显示内容.

这是我的更新代码

ContentResolver cr = getContentResolver();
  ContentValues values = new ContentValues();
  values.put (Events.CALENDAR_ID,calendarId);
  values.put (Events.TITLE,title);
  values.put (Events.DTEND,eventEnd.getTimeInMillis());
  String where = "_id =" + eventId +
                 " and " + CALENDAR_ID + "=" + calendarId;
  int count = cr.update (Events.CONTENT_URI,values,where,null);
  if (count != 1)
     throw new IllegalStateException ("more than one row updated");

谢谢.

解决方法

解决方案原来是添加开始日期:

ContentResolver cr = getContentResolver();
  ContentValues values = new ContentValues();
  values.put (Events.CALENDAR_ID,title);
  values.put (Events.DTSTART,eventStart.getTimeInMillis());
  values.put (Events.DTEND,null);
  if (count != 1)
     throw new IllegalStateException ("more than one row updated");

需要注意的是:此案例仅说明如何更新非重复事件.非重复事件具有空RRULE.

我怀疑提供者代码正在做的是仅使用您提供的值而不是重新获取开始日期本身(显然,如果用户更改了开始日期,您无论如何都必须提供它).从减少数据库访问的角度来看,这是有道理的.太糟糕的谷歌没有记录任何这些.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐