2016-08-19 59 views
0

我正在創建一個應用程序,它將創建一個特定的日曆並管理其中的事件。CalendarProvider爲什麼不能獲取所有事件?

目前,用於測試目的,我想告訴每一個事件,我有我的供應商,我與這個代碼做:

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會像這樣在一年內修剪我的日曆?如何防止這個或更好地同步這個特定的日曆?

此行爲記錄在某處嗎?

回答

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(); 

PL找到這些版本在較低的則在Android 2.2及使用這些事件你需要的地方...

相關問題