如何获取重复事件的实时时间?

4

我使用以下方法获取所有日历事件:

public Cursor getEventsCursor(Context context) {        
    long curr = System.currentTimeMillis();
    long begin = curr - DateUtils.DAY_IN_MILLIS * 30; // - 30 days
    long end = curr + DateUtils.DAY_IN_MILLIS * 30;   // + 30 days

    Cursor cur = null;
    ContentResolver cr = context.getContentResolver();

    String selection = Events.VISIBLE + "= ?";
    String[] selectionArgs = new String[] {"1"};
    String order = Events.DTSTART + " DESC";

    Uri.Builder builder = Instances.CONTENT_URI.buildUpon();
    ContentUris.appendId(builder, begin);
    ContentUris.appendId(builder, end);

    return cr.query(builder.build(), EVENT_PROJECTION, 
            selection, selectionArgs, order);
} 

能正常工作,但我会得到所有重复事件的初始时间!

日志

Feeder milestone; eventId: 12;  date=2012-12-06 11:00:00  // initial time
Feeder milestone; eventId: 23;  date=2012-12-06 11:00:00
Feeder milestone; eventId: 178; date=2012-12-06 11:00:00
Feeder milestone; eventId: 180; date=2012-12-06 11:00:00

如何获取重复事件的实际时间?

示例:如果重复事件喂食器里程碑是每两周一次的事件,我期望:

Feeder milestone; eventId: 12;  date=2014-08-03 11:00:00
Feeder milestone; eventId: 23;  date=2014-08-27 11:00:00
Feeder milestone; eventId: 178; date=2014-09-11 11:00:00
Feeder milestone; eventId: 180; date=2014-09-25 11:00:00
1个回答

8
Calendar Provider documentation中,有三个与事件相关的内容之一是实例

事件:此表包含特定于事件的信息。此表中的每一行都具有单个事件的信息,例如标题、位置、开始时间、结束时间等。事件可以一次性发生或多次重复发生。参与者、提醒和扩展属性存储在单独的表中。它们各自具有引用事件表中_ID的EVENT_ID。

实例:此表包含每个事件发生的起始和结束时间。此表中的每一行代表单个事件实例。对于一次性事件,实例与事件的映射为1:1。对于重复事件,将自动生成多个行,对应于该事件的多个发生。

(强调是我的)

在重复事件的情况下,Events.DTSTART指的是整个事件的开始时间。

另一方面,Instances.BEGINInstances.END 分别指每个事件发生的开始和结束时间。

一般情况下,始终使用Instances.BEGIN方便地获取所有事件(无论是否重复)的开始时间。


在不查询“Instances”的情况下,是否可以获取事件的“duration”?当我创建事件时,我设置了startend,根据这些值计算所有实例的持续时间。为什么我不能从事件中获取此信息(或者我做错了什么)?请检查问题http://stackoverflow.com/questions/40221843/why-duration-is-null-for-recurrent-event-in-android - Natasha

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接