从android日历中检索上次添加的事件的数据

Ahm*_*asi 6 android uri google-calendar-api android-calendar

我想从android日历中检索最后添加的事件的数据.我正在使用此代码获取最后一个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;
 }
Run Code Online (Sandbox Code Playgroud)

然后我只需使用以下代码添加一个事件:

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);
Run Code Online (Sandbox Code Playgroud)

在此之后,我只需使用以下代码检索此事件的数据:

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;
}
Run Code Online (Sandbox Code Playgroud)

但我无法获得此事件的数据.我不知道问题出在哪里.请帮我解决这个问题.

Daw*_*asi 5

使用此代码。它在我的 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;
    }
Run Code Online (Sandbox Code Playgroud)