如何获取设备日历(默认日历)事件并显示在我们的应用程序中?

Posted

技术标签:

【中文标题】如何获取设备日历(默认日历)事件并显示在我们的应用程序中?【英文标题】:How to get device Calendar (default calendar) events and display in our Application? 【发布时间】:2017-07-14 20:58:04 【问题描述】:

我对日历有点陌生。谁能建议我如何从默认日历(不是谷歌日历或任何其他唯一默认日历)中获取事件(例如生日/会议提醒)并将其显示在我们的应用程序中的listview/recyclerview 中?

【问题讨论】:

【参考方案1】:

这个SO question 描述了读取和写入日历。您需要阅读日历的关键信息是:

Uri uri = CalendarContract.Calendars.CONTENT_URI;
String[] projection = new String[] 
   CalendarContract.Calendars._ID,
   CalendarContract.Calendars.ACCOUNT_NAME,
   CalendarContract.Calendars.CALENDAR_DISPLAY_NAME,
   CalendarContract.Calendars.NAME,
   CalendarContract.Calendars.CALENDAR_COLOR
;

Cursor calendarCursor = managedQuery(uri, projection, null, null, null);

那么你需要从游标中提取数据:

ArrayList<String> ids = new ArrayList<String>();
try 
        if (cursor.getCount() > 0) 
            while (cursor.moveToNext()) 
                String id= cursor.getString(0);
                calendars.add(id);  
            
        
     catch (AssertionError ex)  /*TODO: log exception and bail*/ 

然后你有 ids 并且需要查询每个 ids 的事件。这在此SO question 的已接受答案中进行了描述。这个github 存储库也有一个解决方案。这些方法中的大多数仅适用于高于 4.2 的 android 版本。

【讨论】:

以上是关于如何获取设备日历(默认日历)事件并显示在我们的应用程序中?的主要内容,如果未能解决你的问题,请参考以下文章

如何从单个谷歌帐户的多个谷歌日历中获取所有事件?

从数据库获取事件并放置日历视图(android)

如何在 Apple-Watch 上获取 iPhone 日历事件提醒

决定如何在 UITableView 中显示事件日历的 DATA

如何使用访问令牌获取 Google 日历事件

如何使用离子电容器将事件添加到移动设备的日历