6

I am just making an operation with Calendar Content Provider, now I am failing at the point to display events for the particular date.

I know the Events URI for the < 2.1 version and 2.2 version, as below:

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

My doubts are:

  1. How do I Fetch all the events?
  2. How do I fetch events for the particular date?

So please, somebody with knowledge about the Calendar please help me and share your knowledge regarding this.

Thanx

MrEngineer13
  • 38,642
  • 13
  • 74
  • 93
Paresh Mayani
  • 127,700
  • 71
  • 241
  • 295
  • check: http://stackoverflow.com/questions/26844770/how-to-get-access-to-the-calendars-on-a-android-phone – Erdinc Ay Nov 11 '14 at 09:13

3 Answers3

9

These examples are for <= 2.1 version;

first; find out which calendars exist

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

Fetching all events, and particular event is done by specifying range
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);

and then let's say you wish to log events ID from calendar with 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);

        }
bbaja42
  • 2,099
  • 18
  • 34
  • @bbaja42 Thanx a lot for support, but i have doubts regarding this line "/instances/when", where you have written this ContentUris.appendId(builder, now - DateUtils.MILLIS_PER_DAY*10000) and ContentUris.appendId(builder, now + DateUtils.MILLIS_PER_DAY*10000); lines , but how do i fetch event for the PARTICULAR DATE only ?? – Paresh Mayani Nov 29 '10 at 10:03
  • 1
    @bbaja42 MILLIS_PER_DAY is not available with ANDROID – Paresh Mayani Nov 29 '10 at 12:12
  • @pm-paresh-mayani you are right; i've used extra library for that – bbaja42 Nov 29 '10 at 22:09
  • @pm-paresh-mayani if you wish to get particular date; u need to put start time of specific date; and end time of specific date. – bbaja42 Nov 29 '10 at 22:11
  • endDate = now + 1 day in miliseconds – bbaja42 Nov 29 '10 at 22:12
  • @bbaja42 thanx a lot, i had done yesterday with the same as you have mentioned, btw thanx a lot for a great support – Paresh Mayani Nov 30 '10 at 12:40
  • I need to show the events of a particular date but i'm getting the Failed to find provider info for com.android.calendar error can you please help me in solving this. – Harish Sep 13 '12 at 11:06
  • @Harish Please create a separate question, with your code and received error. – bbaja42 Sep 14 '12 at 07:59
1

// Here's a way for you to get all the Calendar events list

public static void readCalendarEvent(Context context) {

   ContentResolver contentResolver = context.getContentResolver();
   cursor = contentResolver.query(Uri.parse("content://com.android.calendar/events"), (new String[] { "_id", "title", "organizer", "dtstart", "dtend"}), null, null, null);

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

       if (cursor.getCount() > 0) {
           while (cursor.moveToNext()) {
               GoogleCalendar googleCalendar = new GoogleCalendar();

               int event_ID = cursor.getInt(0);
               googleCalendar.setEvent_id(event_ID);
               String title = cursor.getString(1);
               googleCalendar.setTitle(title);
               String mOrganizer = cursor.getString(2);
               googleCalendar.setOrganizer(mOrganizer);
               String dtStart = cursor.getString(3);
               googleCalendar.setDtstart(dtStart);
               String dtEnd = cursor.getString(4);
               googleCalendar.setDtend(dtEnd);
               gCalendar.add(googleCalendar);
               Log.d("CaledarM",googleCalendar.getTitle()+" name = "+googleCalendar.getOrganizer()+" dateStart = "+googleCalendar.getDtstart()+" Size = " + gCalendar.size());
           }
       }
   } catch (AssertionError ex) {
       ex.printStackTrace();
   } catch (Exception e) {
       e.printStackTrace();
   }
}

// class GoogleCalendar()

public class GoogleCalendar {

    private int event_id;
    private String title,
            organizer,
            dtstart,
            dtend;

    public GoogleCalendar()
    {
    }

    public int getEvent_id() {
        return event_id;
    }

    public void setEvent_id(int calendar_id) {
        event_id = calendar_id;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getOrganizer() {
        return organizer;
    }

    public void setOrganizer(String description) {
        this.organizer = description;
    }

    public String getDtstart() {
        return dtstart;
    }

    public void setDtstart(String dtstart1) {
        this.dtstart = dtstart1;
    }

    public String getDtend() {
        return dtend;
    }

    public void setDtend(String dtend1) {
        this.dtend = dtend1;
    }
}
Gary Chen
  • 248
  • 2
  • 14
Huy TRAN
  • 71
  • 6
0

Use this code to get daily events,

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();
        }
    }
}
user2841300
  • 353
  • 1
  • 7
  • 23