2010-11-29 7 views
6

Я просто делаю операцию с поставщиком содержимого календаря, теперь я не могу отображать события для конкретной даты.События в Android-календаре

Я знаю, что события URI для версии < 2.1 и 2.2 версии, как показано ниже:

eventsUri = Uri.parse("content://calendar/events"); // < Android 2.1 version 

eventsUri = Uri.parse("content://com.android.calendar/events"); // For Android Froyo 2.2 and later version 

моих сомнений:

  1. Как Fetch все события?
  2. Как получить события для конкретной даты?

Поэтому, пожалуйста, кто-нибудь, кто знает о календаре, пожалуйста, помогите мне и поделитесь своими знаниями об этом.

Thanx

+0

проверка: HTTP: // stackoverflow.com/questions/26844770/how-to-get-access-to-the-calendars-on-a-android-phone – 2014-11-11 09:13:41

ответ

9

Эти примеры предназначены для < = 2,1 версии;

сперва; выяснить, какие существуют календари

Cursor cursor = cr.query(Uri.parse("content://calendar/calendars"), new String[]{ "_id", "displayname" }, null, null, null); 
cursor.moveToFirst(); 
String[] CalNames = new String[cursor.getCount()]; 
int[] CalIds = new int[cursor.getCount()]; 
for (int i = 0; i < CalNames.length; i++) { 
    CalIds[i] = cursor.getInt(0); 
    CalNames[i] = cursor.getString(1); 
    cursor.moveToNext(); 
} 
cursor.close(); 

Получение всех событий, а конкретное событие делается путем указания диапазона
ContentResolver contentResolver = getContentResolver();

Uri.Builder builder = Uri.parse(getCalendarUriBase() + "/instances/when").buildUpon(); 
     long now = new Date().getTime(); 
     ContentUris.appendId(builder, now - DateUtils.MILLIS_PER_DAY*10000); 
     ContentUris.appendId(builder, now + DateUtils.MILLIS_PER_DAY * 10000); 

, а затем, скажем, вы хотите регистрировать события ID из календаря с ID = 1

Cursor eventCursor = contentResolver.query(builder.build(), 
       new String[] { "event_id"}, "Calendars._id=" + 1, 
       null, "startDay ASC, startMinute ASC"); 
     // For a full list of available columns see http://tinyurl.com/yfbg76w 
     while (eventCursor.moveToNext()) { 
      String uid2 = eventCursor.getString(0); 
      Log.v("eventID : ", uid2); 

     } 
+0

@ bbaja42 Thanx много для поддержки, но у меня есть сомнения относительно этой строки "/ экземпляры/когда », где вы написали этот ContentUris.appendId (построитель, теперь - DateUtils.MILLIS_PER_DAY * 10000) и ContentUris.appendId (построитель, теперь + DateUtils.MILLIS_PER_DAY * 10000); строки, но как я могу получить событие только для ОПРЕДЕЛЕННОЙ ДАТЫ? – 2010-11-29 10:03:17

+1

@ bbaja42 MILLIS_PER_DAY недоступно с ANDROID – 2010-11-29 12:12:46

0

Используйте этот код, чтобы получить ежедневные события,

public static void readCalendarEvent(Context context) throws ParseException { 

     ContentResolver contentResolver = context.getContentResolver(); 
     Calendar calendar = Calendar.getInstance(); 
     String dtstart = "dtstart"; 
     String dtend = "dtend"; 


     SimpleDateFormat displayFormatter = new SimpleDateFormat("MMMM dd, yyyy (EEEE)"); 

     stime=displayFormatter.format(calendar.getTime());  

     SimpleDateFormat startFormatter = new SimpleDateFormat("MM/dd/yy"); 
     String dateString = startFormatter.format(calendar.getTime()); 

     long after = calendar.getTimeInMillis(); 
     SimpleDateFormat formatterr = new SimpleDateFormat("hh:mm:ss MM/dd/yy"); 
     Calendar endOfDay = Calendar.getInstance(); 
     Date dateCCC = formatterr.parse("23:59:59 " + dateString); 
     endOfDay.setTime(dateCCC); 






    cursor = contentResolver.query(Uri.parse("content://com.android.calendar/events"), (new String[] { "calendar_id", "title", "description", "dtstart", "dtend","eventTimezone", "eventLocation" }), "(" + dtstart + ">" + after + " and " + dtend + "<" + endOfDay.getTimeInMillis() + ")", null, "dtstart ASC"); 


     /*String[] COLS={"calendar_id", "title", "description", "dtstart", "dtend","eventTimezone", "eventLocation"}; 

     cursor = contentResolver.query(


       CalendarContract.Events.CONTENT_URI, COLS,null, null, null);*/ 

     gCalendar = new ArrayList<GoogleCalendar>(); 
     try { 


      if (cursor.getCount() > 0) { 


       while (cursor.moveToNext()) { 
        GoogleCalendar googleCalendar = new GoogleCalendar(); 
        gCalendar.add(googleCalendar); 
        int calendar_id = cursor.getInt(0); 
        googleCalendar.setCalendar_id(calendar_id); 
        String title = cursor.getString(1); 
        googleCalendar.setTitle(title); 
        String description = cursor.getString(2); 
        googleCalendar.setDescription(description); 
        String dtstart1 = cursor.getString(3); 
        dt=convertDate(dtstart1,"hh:mm:ss"); 
        googleCalendar.setDtstart(dt);          
        String dtend1 = cursor.getString(4); 
        googleCalendar.setDtend(dtend1);                
        String eventTimeZone=cursor.getString(5); 
        googleCalendar.setEventTimeZone(eventTimeZone); 
        String eventlocation = cursor.getString(6);     
        googleCalendar.setEventlocation(eventlocation); 

       } 
      } 
     } catch (AssertionError ex) { 
      ex.printStackTrace(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
} 
Смежные вопросы