Inserting Calendar items in Android ICS

For one of my application we have to insert an event into calendar.

long calID = 3;
long startMillis = 0; 
long endMillis = 0;     
Calendar beginTime = Calendar.getInstance();
beginTime.set(2012, 8, 10, 7, 30);
startMillis = beginTime.getTimeInMillis();
Calendar endTime = Calendar.getInstance();
endTime.set(2012, 8, 10, 8, 45);
endMillis = endTime.getTimeInMillis();
ContentResolver cr = getContentResolver();
ContentValues values = new ContentValues();
values.put(Events.DTSTART, startMillis);
values.put(Events.DTEND, endMillis);
values.put(Events.TITLE, "Jazzercise");
values.put(Events.DESCRIPTION, "Group workout");
values.put(Events.CALENDAR_ID, calID);
values.put(Events.EVENT_TIMEZONE, "America/Los_Angeles");
Uri uri = cr.insert(CalendarContract.Calendars.CONTENT_URI, values);
// get the event ID that is the last element in the Uri
long eventID = Long.parseLong(uri.getLastPathSegment());
Log.d("MainActivity", "addCalendarEvents :: " + "eventID :: "+eventID);

Cursor cursor = cr.query(Events.CONTENT_URI, null, Events.TITLE +"='Jazzercise'", null, null);
Log.d("MainActivity", "addCalendarEvents :: " + "cursor :: "+cursor.getCount());

Provided on http://developer.android.com/guide/topics/providers/calendar-provider.html However, firstly it gives me a error

 Failed to get type for: content://com.android.calendar (Unknown URL content://com.android.calendar)

Also the cursor count is zero. When i try to search with the title. Note: I tried using the intents service to add events, however I don't want user discretion while adding the event.

I have tested it on a Galaxy Nexus (4.1) and Nexus S(4.1).

Any help with the correct UI which is to be used with ICS?

BR, Jayshil

Answers


I've figured it out. The line:

Failed to get type for: content://com.android.calendar (Unknown URL content://com.android.calendar)

is a complete red herring (i.e. irrelevant). It's simply some framework code that performs infrastructural work, as seen here.


The problem lies in the documentation - if you're like me, you probably expected long calID = 3; to be some valid Calendar ID. It's not a valid ID, it's a placeholder for the sake of documentation.

What you're doing with the code above, if you're using an empty emulator, is inserting an entry into a non-existent calendar, i.e. nowhere visible.

What you need is to:

  1. Query for and choose an existing calendar. Once again - on the emulator, there is no default calendar.
  2. Use the obtained actual calendar ID to insert the event.

In short - the documentation and debug messages are not idiot-proof enough ;).


Need Your Help

While loop iterating only once while using api to post on users wall?

php facebook loops while-loop facebook-wall

I am using while loop to post on users wall through application. While loop executes only once and post on users wall once at a time. I wonder why this is happening.

ROMable (but complex) array of (ROMable) objects - how to solve it?

c++ c embedded rom

I'm working on a firmware for a MCU (ARM Cortex-M3). These devices don't have a lot of RAM, so by all means you should try to put data in constant memory (flash).

About UNIX Resources Network

Original, collect and organize Developers related documents, information and materials, contains jQuery, Html, CSS, MySQL, .NET, ASP.NET, SQL, objective-c, iPhone, Ruby on Rails, C, SQL Server, Ruby, Arrays, Regex, ASP.NET MVC, WPF, XML, Ajax, DataBase, and so on.