【问题标题】:How to get calendar events with title including recurring events如何获取带有标题的日历事件,包括重复事件
【发布时间】:2020-03-09 18:28:10
【问题描述】:

我需要做一件不复杂的事情,人们可以相信。我想从手机上的日历中获取事件实例以及事件的标题。我在 Stack Overflow 上找到了几个答案,告诉查询 Instances 表以获取重复事件,我也这样做了,但我不知道如何从这个查询中获取事件名称,因为它们在 Events 表中。我没有找到如何做到这一点的例子。我尝试通过将事件与实例连接来创建自定义查询,但我不知道是否可以像这样查询日历表(绕过 API)。

有人知道如何简单地获取给定开始和结束日期的所有Event.TITLEInstance.DTSTART

【问题讨论】:

    标签: android calendar


    【解决方案1】:

    好吧,我可能需要睡觉了……

    Instances 表的列 CalendarContract.Instances.TITLE 包含标题,即使它不在 Instances 表中。查询命中一些View 而不是Instances 表。我发誓我尝试过这种方式,但在智能感知中找不到 TITLE 的列。

    这里的完整解决方案适用于任何可能觉得这很有用的人:

    DateTime startDate = DateTime.now().withTime(0, 0, 0, 0);
    DateTime endDate = startDate.plusDays(7);
    
    Uri.Builder eventsUriBuilder = CalendarContract.Instances.CONTENT_URI
                .buildUpon();
    ContentUris.appendId(eventsUriBuilder, startDate.getMillis());
    ContentUris.appendId(eventsUriBuilder, endDate.getMillis());
    
    Uri eventsUri = eventsUriBuilder.build();
    Cursor cursor = null;
    cursor = getContentResolver().query(
            eventsUri,
            new String[] {CalendarContract.Instances.DTSTART, CalendarContract.Instances.TITLE},
            CalendarContract.Instances.DTSTART + " >= " + startDate.getMillis() + " and " + CalendarContract.Instances.DTSTART + " <= " + endDate.getMillis() + " and " + CalendarContract.Instances.VISIBLE + " = 1",
            null,
            CalendarContract.Instances.DTSTART + " ASC");
    

    此代码使用Joda time library

    【讨论】:

      【解决方案2】:

      此代码返回所有事件(重复事件) 只需在您的代码中添加代码 " CalendarContract.Instances.VISIBLE + " = 0" +" 或 "+CalendarContract.Instances.VISIBLE + " = 1" "

      它返回一年中的所有事件。

      DateTime startDate = DateTime.now().withTime(0, 0, 0, 0);
      DateTime endDate = startDate.plusDays(360);
      
      Uri.Builder eventsUriBuilder = CalendarContract.Instances.CONTENT_URI
              .buildUpon();
      ContentUris.appendId(eventsUriBuilder,startOfDay.getTimeInMillis());
      ContentUris.appendId(eventsUriBuilder, endDate.getMillis());
      
      Uri eventsUri = eventsUriBuilder.build();
      Cursor cursor = null;
      cursor = context.getContentResolver().query(
              eventsUri,
              new String[]{CalendarContract.Instances.CALENDAR_ID, CalendarContract.Instances.TITLE, CalendarContract.Instances.DESCRIPTION, CalendarContract.Instances.BEGIN, CalendarContract.Instances.END, CalendarContract.Instances.EVENT_LOCATION, CalendarContract.Instances.ORIGINAL_ID, CalendarContract.Instances.ORGANIZER, CalendarContract.Instances.OWNER_ACCOUNT},
              CalendarContract.Instances.BEGIN + " >= " + .getTimeInMillis()+ " and "+CalendarContract.Instances.BEGIN + " <= " + endDate.getMillis()+" and " + CalendarContract.Instances.VISIBLE + " = 0" +" or "+CalendarContract.Instances.VISIBLE + " = 1",
              null,
              CalendarContract.Instances.BEGIN + " ASC");
      

      【讨论】:

      • 您还应该说明您的代码的作用,因为它不是单行代码,而不仅仅是在这里复制粘贴...
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-10
      • 2022-11-24
      • 2018-03-06
      • 2018-02-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多