Запуск календаря с идентификатором события из календарного идентификатора контракта открывает неверное событие

Я использую календарный контракт для извлечения событий из БД.
Сначала я получаю список календарей, а затем вынимаю все события в определенное время для каждого календаря, все работает нормально.
я использую _id Имя столбца, чтобы получить идентификатор события.
Но когда я пытаюсь получить ожидающее событие, чтобы открыть календарь для этого конкретного события, календарь открывается для другого события.
Я провел несколько тестов, чтобы увидеть, является ли идентификатор уникальным, и кажется ли он правильным.
Вот создание pendingIntent:

public static PendingIntent getEventPendingIntent(Context c, int eventID) {
    Intent intent = new Intent(Intent.ACTION_VIEW);
    Uri.Builder uri = Events.CONTENT_URI.buildUpon();
    uri.appendPath(Long.toString(eventID));
    intent.setData(uri.build());
    return PendingIntent.getActivity(c, 0, intent, 0);
}

Это метод для получения событий для данного CalendarID:

private static Cursor getEvents(String calendarID, ContentResolver contentResolver, long    timeFromNow) {
    // Create a builder to define the time span
    Uri.Builder builder = Uri.parse("content://com.android.calendar/instances/when").buildUpon();

    long now = new Date().getTime();
    ContentUris.appendId(builder, now);
    if (timeFromNow == -1) {
        timeFromNow = DateUtils.DAY_IN_MILLIS * 10000;
    }
    ContentUris.appendId(builder, now + timeFromNow);

    Cursor eventCursor = null;
    // Create an event cursor to find all events in the calendar
    String[] queryFields = {"title", "dtstart", "begin", "end", "allDay", "eventLocation","description", "_id" };
    try {
        eventCursor = contentResolver.query(builder.build(),
                queryFields , "calendar_id=" + calendarID, null, "startDay ASC, startMinute ASC");
    } catch (Exception e) {
        Log.w(TAG, "ERROR: "+e.toString());
        Log.w(TAG, "Didn't find calender for ID="+calendarID);
        eventCursor = null;
    }
    return eventCursor;
}

1 ответ

Решение

Проблема была с ID столбцов, я использовал _id вместо event_id
После изменения этого были показаны правильные события.

Другие вопросы по тегам