为什么CalendarProvider没有获得所有活动?

时间:2016-08-19 07:46:06

标签: android android-calendar

我正在创建一个应用程序,用于创建特定日历并管理其中的事件。

目前,出于测试目的,我想展示我在提供程序中的每个事件,并且我正在使用此代码执行此操作:

Cursor cursor = getContentResolver().query(
    CalendarContract.Events.CONTENT_URI,
    new String[]{CalendarContract.Events.TITLE, CalendarContract.Events.DTSTART},
    null, null, 
    CalendarContract.Events.DTSTART
);

在这里,我得到了一个意想不到的行为:我在这里发生的最早的事件发生在2015年8月16日,即使我的谷歌议程向我展示了2014年的事件。 唯一的例外是去年发生的重复事件(其中8起与总共632起)

为什么contentProvider会像这样在1年内修剪我的日历?如何防止这种情况或更好地同步这个特定的日历?

这种行为是否记录在某处?

1 个答案:

答案 0 :(得分:0)

请使用我的代码获取所有活动

谷歌日历应用程序与Android手机集成。

首先你设置这行将从另一个类形式读取日历事件,你的类是当前的ApplicationController.java。

calendar.readCalendar(ApplicationSettings.this);




import android.content.ContentResolver;
import android.content.ContentUris;
import android.content.Context;
import android.database.Cursor;
import android.net.Uri;
import android.text.format.DateUtils;

public class ReadCalendar 
{
static Cursor cursor;

public static void readCalendar(Context context) {

    ContentResolver contentResolver = context.getContentResolver();

    // Fetch a list of all calendars synced with the device, their display names and whether the

    cursor = contentResolver.query(Uri.parse("content://com.android.calendar/calendars"),
                (new String[] { "_id", "displayName", "selected"}), null, null, null);

    HashSet<String> calendarIds = new HashSet<String>();

    try
    {
        System.out.println("Count="+cursor.getCount());
        if(cursor.getCount() > 0)
        {
            System.out.println("the control is just inside of the cursor.count loop");
        while (cursor.moveToNext()) {

             String _id = cursor.getString(0);
             String displayName = cursor.getString(1);
             Boolean selected = !cursor.getString(2).equals("0");

            System.out.println("Id: " + _id + " Display Name: " + displayName + " Selected: " + selected);
            calendarIds.add(_id);
        }
    }
    }
    catch(AssertionError ex)
    {
        ex.printStackTrace();
    }
    catch(Exception e)
    {
        e.printStackTrace();
    }


    // For each calendar, display all the events from the previous week to the end of next week.        
    for (String id : calendarIds) {
        Uri.Builder builder = Uri.parse("content://com.android.calendar/instances/when").buildUpon();
        //Uri.Builder builder = Uri.parse("content://com.android.calendar/calendars").buildUpon();
        long now = new Date().getTime();

        ContentUris.appendId(builder, now - DateUtils.DAY_IN_MILLIS * 10000);
        ContentUris.appendId(builder, now + DateUtils.DAY_IN_MILLIS * 10000);

        Cursor eventCursor = contentResolver.query(builder.build(),
                new String[]  { "title", "begin", "end", "allDay"}, "Calendars._id=" + 1,
                null, "startDay ASC, startMinute ASC");

        System.out.println("eventCursor count="+eventCursor.getCount());
        if(eventCursor.getCount()>0)
        {

            if(eventCursor.moveToFirst())
            {
                do
                {
                    Object mbeg_date,beg_date,beg_time,end_date,end_time;  

                    final String title = eventCursor.getString(0);
                    final Date begin = new Date(eventCursor.getLong(1));
                    final Date end = new Date(eventCursor.getLong(2));
                    final Boolean allDay = !eventCursor.getString(3).equals("0");

            /*  System.out.println("Title: " + title + " Begin: " + begin + " End: " + end +
                        " All Day: " + allDay);
            */  
                    System.out.println("Title:"+title);
                    System.out.println("Begin:"+begin);
                    System.out.println("End:"+end);
                    System.out.println("All Day:"+allDay);

                /* the calendar control metting-begin events Respose  sub-string (starts....hare) */    

                      Pattern p = Pattern.compile(" ");
                      String[] items = p.split(begin.toString());
                      String scalendar_metting_beginday,scalendar_metting_beginmonth,scalendar_metting_beginyear,scalendar_metting_begindate,scalendar_metting_begintime,scalendar_metting_begingmt;

                      scalendar_metting_beginday = items[0];
                      scalendar_metting_beginmonth = items[1];
                      scalendar_metting_begindate = items[2];
                      scalendar_metting_begintime = items[3];
                      scalendar_metting_begingmt = items[4];
                      scalendar_metting_beginyear = items[5];


                    String  calendar_metting_beginday = scalendar_metting_beginday;
                    String  calendar_metting_beginmonth = scalendar_metting_beginmonth.toString().trim();

                    int  calendar_metting_begindate = Integer.parseInt(scalendar_metting_begindate.trim());

                    String calendar_metting_begintime = scalendar_metting_begintime.toString().trim();
                     String calendar_metting_begingmt = scalendar_metting_begingmt;
                     int calendar_metting_beginyear = Integer.parseInt(scalendar_metting_beginyear.trim());


                      System.out.println("calendar_metting_beginday="+calendar_metting_beginday);

                      System.out.println("calendar_metting_beginmonth ="+calendar_metting_beginmonth);

                      System.out.println("calendar_metting_begindate ="+calendar_metting_begindate);

                      System.out.println("calendar_metting_begintime="+calendar_metting_begintime);

                      System.out.println("calendar_metting_begingmt ="+calendar_metting_begingmt);

                      System.out.println("calendar_metting_beginyear ="+calendar_metting_beginyear);

                      /* the calendar control metting-begin events Respose  sub-string (starts....ends) */  

                    /* the calendar control metting-end events Respose  sub-string (starts....hare) */  

                      Pattern p1 = Pattern.compile(" ");
                      String[] enditems = p.split(end.toString());
                      String scalendar_metting_endday,scalendar_metting_endmonth,scalendar_metting_endyear,scalendar_metting_enddate,scalendar_metting_endtime,scalendar_metting_endgmt;

                      scalendar_metting_endday = enditems[0];
                      scalendar_metting_endmonth = enditems[1];
                      scalendar_metting_enddate = enditems[2];
                      scalendar_metting_endtime = enditems[3];
                      scalendar_metting_endgmt = enditems[4];
                      scalendar_metting_endyear = enditems[5];


                    String  calendar_metting_endday = scalendar_metting_endday;
                    String  calendar_metting_endmonth = scalendar_metting_endmonth.toString().trim();

                    int  calendar_metting_enddate = Integer.parseInt(scalendar_metting_enddate.trim());

                    String calendar_metting_endtime = scalendar_metting_endtime.toString().trim();
                     String calendar_metting_endgmt = scalendar_metting_endgmt;
                     int calendar_metting_endyear = Integer.parseInt(scalendar_metting_endyear.trim());


                      System.out.println("calendar_metting_beginday="+calendar_metting_endday);

                      System.out.println("calendar_metting_beginmonth ="+calendar_metting_endmonth);

                      System.out.println("calendar_metting_begindate ="+calendar_metting_enddate);

                      System.out.println("calendar_metting_begintime="+calendar_metting_endtime);

                      System.out.println("calendar_metting_begingmt ="+calendar_metting_endgmt);

                      System.out.println("calendar_metting_beginyear ="+calendar_metting_endyear);

                      /* the calendar control metting-end events Respose  sub-string (starts....ends) */    

                    System.out.println("only date begin of events="+begin.getDate());
                    System.out.println("only begin time of events="+begin.getHours() + ":" +begin.getMinutes() + ":" +begin.getSeconds());

                    System.out.println("only date begin of events="+end.getDate());
                    System.out.println("only begin time of events="+end.getHours() + ":" +end.getMinutes() + ":" +end.getSeconds());

                    beg_date = begin.getDate();
                    mbeg_date = begin.getDate()+"/"+calendar_metting_beginmonth+"/"+calendar_metting_beginyear;
                    beg_time = begin.getHours();

                    System.out.println("the vaule of mbeg_date="+mbeg_date.toString().trim());
                    end_date = end.getDate();
                    end_time = end.getHours();


                    CallHandlerUI.metting_begin_date.add(beg_date.toString());
                    CallHandlerUI.metting_begin_mdate.add(mbeg_date.toString());

                    CallHandlerUI.metting_begin_mtime.add(calendar_metting_begintime.toString());

                    CallHandlerUI.metting_end_date.add(end_date.toString());
                    CallHandlerUI.metting_end_time.add(end_time.toString());
                    CallHandlerUI.metting_end_mtime.add(calendar_metting_endtime.toString());

                }
                while(eventCursor.moveToNext());
            }
        }
        break;
    }
}
}

每个活动都会在您的日历中使用该回传网址为2.2及以上版本:

Uri.parse("content://com.android.calendar/instances/when").buildUpon();

在android中查找低于2.2的那些版本,并根据需要使用这些事件......