无法以编程方式从Android日历中读取重复发生的事件

我已按照此链接中的教程 – http://jimblackler.net/blog/?p=151&cpage=2#comment-52767来访问内部的android日历数据库(即使它没有得到SDK的正式支持).它适用于除重复活动之外的所有条目.光标根本不会返回任何重复发生的事件.有人可以帮助我吗?以下是我的光标声明 –
String[] projection = new String[] { "title","description","dtstart","eventLocation" };
    String selection = "(calendar_id=" + calID + ")AND " + (Now - window)
            + "<dtstart AND dtstart< " + (Now + (window));
    String sortorder = "dtstart ASC";

    Cursor managedCursor = getCalendarManagedCursor(projection,selection,"events",sortorder);

    private Cursor getCalendarManagedCursor(String[] projection,String selection,String path,String sort) {
    Uri calendars = Uri.parse("content://calendar/" + path);
    Cursor managedCursor = null;
    try {
        managedCursor = getContentResolver().query(calendars,projection,null,sort);
    } catch (IllegalArgumentException e) {
        Log.w(DEBUG_TAG,"Failed to get provider at [" + calendars.toString() + "]");
    }

    if (managedCursor == null) {
        // try again
        calendars = Uri.parse("content://com.android.calendar/" + path);
        try {
            managedCursor = getContentResolver().query(calendars,sort);
        } catch (IllegalArgumentException e) {
            Log.w(DEBUG_TAG,"Failed to get provider at [" + calendars.toString()
                            + "]");
        }`

解决方法

如果需要查找定期事件,请使用Instances表.

查询它的URI是:

> instances / when / * / * – 两次(毫秒)之间的所有实例
> instances / whenbyday / * / * – 两次(天)之间的所有实例
> instances / groupbyday / * / * – 与whenbyday相同,但按开始日分组

该表中的列列表是:

> _id – 此实例的ID
> event_id – 从中​​创建的事件
>开始 – 开始时间(毫秒)
> end – 结束时间(毫秒)
> startDay – 实例的开始日期
> endDay – 实例结束日
> startMinute – 午夜分钟(0..1440)
> endMinute – 从午夜开始的分钟

您还可以使用“事件”和“日历”表中的列.

您可以在链接的同一页面上看到一个示例:http://jimblackler.net/blog/?p=151

例:

String[] projection = new String[] {
        "title","begin","eventLocation"
};
String selection = "calendar_id = " + calID;
String path = "instances/when/" + (Now - window) + "/" + (Now + window);
String sortOrder = "begin DESC";
Cursor managedCursor = getCalendarManagedCursor(
        projection,path,sortorder);

编辑:谷歌似乎开始记录日历提供商.浏览到Calendar Providier | Google Developers获取更多信息.

相关文章

Android性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...