Retrieving Data of last added event from android calendar
android, android-calendar, google-calendar-api, uri
Solution
use this code. its working in my aap
public long GetMaxID(ContentResolver cr, Uri cal_uri, Context context)
{
Uri local_uri = cal_uri;
if (cal_uri == null)
{
// local_uri = Uri.parse("content://calendar/calendars/" +
// "events");
local_uri = Uri.parse("content://com.android.calendar/events");
}
Cursor cursor = cr.query(local_uri, new String[]
{ "MAX(_id) as max_id" }, null, null, "_id");
cursor.moveToFirst();
long max_val = cursor.getLong(cursor.getColumnIndex("max_id"));
return max_val + 1;
}
public static CalendarData GetEventDetails(String ID, Context context)
{
CalendarData temp = null;
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)
for (int id = 0; id <= calendarIds.size(); id++)
{
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[]
{ "_id", "title", "begin", "end", "allDay" },
"Calendars._id=" + id, null, null);
System.out.println(id + " eventCursor count="
+ eventCursor.getCount());
if (eventCursor.getCount() > 0)
{
eventCursor.moveToFirst();
while (eventCursor.moveToNext())
{
Object mbeg_date, beg_date, beg_time, end_date, end_time;
final String eventID = eventCursor.getString(0);
final String title = eventCursor.getString(1);
final Date begin = new Date(eventCursor.getLong(2));
final Date end = new Date(eventCursor.getLong(3));
final Boolean allDay = !eventCursor.getString(4)
.equals("0");
if (eventID.equals(ID))
{
temp = new CalendarData();
temp.Title = eventCursor.getString(1);
temp.StartDate = eventCursor.getLong(2);
temp.EndDate = eventCursor.getLong(3);
break;
}
}
}
// break;
}
return temp;
}
Problem
I want to retrive the data of last added event from android calendar. I am using this code to get last id. ``` public static long getNewEventId(ContentResolver cr, Uri cal_uri) { Uri local_uri = cal_uri; if (cal_uri == null) { local_uri = Uri.parse("content://com.android.calendar/events"); } Cursor cursor = cr.query(local_uri, new String[] { "MAX(_id) as max_id" }, null, null, "_id"); cursor.moveToFirst(); long max_val = cursor.getLong(cursor.getColumnIndex("max_id")); return max_val + 1; } ``` And then I simply add an event using this code: ``` Intent intent = new Intent(Intent.ACTION_EDIT); intent.setType("vnd.android.cursor.item/event"); intent.putExtra("beginTime", SelectedDate); intent.putExtra("allDay", false); intent.putExtra("rrule", "FsREQ=DAILY"); intent.putExtra("endTime", SelectedDate + 60 * 60 * 1000); intent.putExtra("title", "Advance Scheduler Event"); startActivity(intent); ``` After this I simply retrieve the data of this event using this code: ``` public CalendarData EventDetails(int ID) { CalendarData temp = null; // ------------------------------------------------------------------------------- ContentResolver cr = getContentResolver(); Cursor cursor_calendar; if (Integer.parseInt(Build.VERSION.SDK) >= 8) { cursor_calendar = cr.query( Uri.parse("content://com.android.calendar/calendars"), new String[] { "_id", "displayname" }, null, null, null); } else { cursor_calendar = cr.query( Uri.parse("content://calendar/calendars"), new String[] { "_id", "displayname" }, null, null, null); } cursor_calendar.moveToFirst(); String[] CalNamess = new String[cursor_calendar.getCount()]; int[] CalIdss = new int[cursor_calendar.getCount()]; for (int i = 0; i < CalNamess.length; i++) { CalIdss[i] = cursor_calendar.getInt(0); CalNamess[i] = cursor_calendar.getString(1); cursor_calendar.moveToNext(); } cursor_calendar.close(); // ------------------------------------------------------------------------------- Cursor cursor_event; if (Integer.parseInt(Build.VERSION.SDK) >= 8) { cursor_event = cr.query( Uri.parse("content://com.android.calendar/events"), new String[] { "calendar_id", "title", "description", "dtstart", "dtend", "eventLocation" }, null, null, null); } else { cursor_event = cr.query(Uri.parse("content://calendar/events"), new String[] { "calendar_id", "title", "description", "dtstart", "dtend", "eventLocation" }, null, null, null); } boolean flag = false; String add = null; cursor_event.moveToFirst(); String[] CalNames = new String[cursor_event.getCount()]; int[] CalIds = new int[cursor_event.getCount()]; for (int i = 0; i < CalNames.length; i++) { CalIds[i] = cursor_event.getInt(0); if (ID == CalIds[i]) { flag = true; Toast.makeText(getApplicationContext(), "ID Found : " + CalIds[i], Toast.LENGTH_LONG).show(); CalNames[i] = "Event" + cursor_event.getInt(0) + ": \nTitle: " + cursor_event.getString(1) + "\nDescription: " + cursor_event.getString(2) + "\nStart Date: " + cursor_event.getLong(cursor_event .getColumnIndex("dtstart")) + cursor_event.getLong(cursor_event .getColumnIndex("dtend")) + cursor_event.getString(5); temp = new CalendarData(); temp.Title = cursor_event.getString(1); temp.Description = cursor_event.getString(2); // temp.StartDate = new Date(cursor_event.getLong(3)); // temp.EndDate = new Date(cursor_event.getLong(4)); temp.StartDate = cursor_event.getLong(cursor_event .getColumnIndex("dtstart")); temp.EndDate = cursor_event.getLong(cursor_event .getColumnIndex("dtend")); temp.Location = cursor_event.getString(5); break; } cursor_event.moveToNext(); } return temp; } ``` But I can't get the data of this event. I am not getting where is the problem. Please, help me to solve this.