Получить информацию о событии календаря на основе идентификатора события, Android? - PullRequest
0 голосов
/ 04 октября 2018

Я сохраняю событие в календаре устройства с кодом ниже

ContentResolver cr = getCurrentContext().getContentResolver();
                ContentValues values = new ContentValues();

                Calendar startDate = Calendar.getInstance();
                startDate.setTimeInMillis(contentDatum.getGist().getScheduleStartDate());
                Calendar endDate = Calendar.getInstance();
                endDate.setTimeInMillis(contentDatum.getGist().getScheduleEndDate());

                values.put(CalendarContract.Events.DTSTART, startDate.getTimeInMillis());
                values.put(CalendarContract.Events.DTEND, endDate.getTimeInMillis());
                values.put(CalendarContract.Events.TITLE, contentDatum.getGist().getTitle());
                values.put(CalendarContract.Events.DESCRIPTION, contentDatum.getGist().getDescription());

                values.put(CalendarContract.Events.CALENDAR_ID, getCalendarId());
                values.put(CalendarContract.Events.EVENT_TIMEZONE, TimeZone.getDefault().getID());

                Uri uri = cr.insert(CalendarContract.Events.CONTENT_URI, values);
                long eventID = Long.parseLong(uri.getLastPathSegment());
                Log.e("event", "" + eventID);
                setCalendarEventId(eventID);
                Intent intent = new Intent(Intent.ACTION_EDIT);
                intent.setData(ContentUris.withAppendedId(CalendarContract.Events.CONTENT_URI, eventID));
                getCurrentActivity().startActivityForResult(intent, 0);

Я сохраняю eventID, который возвращается после его вставки.

Для извлечения данных на основес идентификатором события, я использую приведенный ниже код

for (int i = 0; i < calendarEventIds.length; i++) {
                        long eventID = Long.parseLong(calendarEventIds[i]);
                        Uri event = ContentUris.withAppendedId(CalendarContract.Events.CONTENT_URI, eventID);
                        Cursor cursor;
                        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
                            cursor = getCurrentContext().getContentResolver().query(event, null, null, null);
                        } else {
                            cursor = getCurrentActivity().managedQuery(event, null, null, null, null);
                        }

                        if (cursor.getCount() == 1) {
                            if (cursor.moveToFirst()) {
                                if (cursor.getLong(cursor.getColumnIndex(CalendarContract.Events.DTSTART)) == contentDatum.getGist().getScheduleStartDate()
                                        && cursor.getLong(cursor.getColumnIndex(CalendarContract.Events.DTEND)) == contentDatum.getGist().getScheduleEndDate()
                                        && cursor.getString(cursor.getColumnIndex(CalendarContract.Events.TITLE)).equalsIgnoreCase(contentDatum.getGist().getTitle())
                                        && cursor.getString(cursor.getColumnIndex(CalendarContract.Events.DESCRIPTION)).equalsIgnoreCase(contentDatum.getGist().getDescription())) {

                                    Toast.makeText(getCurrentContext(), "Event already exists in your calendar.", Toast.LENGTH_SHORT).show();
                                    calendarEventExist = true;
                                }
                            }
                        }
                    }

Однако я не уточняю подробности события, которое я добавил.

1 Ответ

0 голосов
/ 09 октября 2018

Я сохранял идентификаторы календаря в строке через запятую.Приведенный ниже код прекрасно работает для получения сведений о событии

if (getCalendarEventId() != null) {
                    String[] calendarEventIds = getCalendarEventId().split(";");
                    for (int i = 0; i < calendarEventIds.length; i++) {
                        long eventID = Long.parseLong(calendarEventIds[i]);
                        Uri event = ContentUris.withAppendedId(CalendarContract.Events.CONTENT_URI, eventID);
                        Cursor cursor;
                        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
                            cursor = getCurrentContext().getContentResolver().query(event, null, null, null);
                        } else {
                            cursor = getCurrentActivity().managedQuery(event, null, null, null, null);
                        }
                        if (cursor.moveToFirst()) {
                            do {
                                if ((cursor.getInt(cursor.getColumnIndex(CalendarContract.Events.DELETED)) == 1)) {
//The added event was deleted and is not visible in calendar but exists in calendar DB

                                    calendarEventExist = false;
                                    break;
                                }
                                if (cursor.getString(cursor.getColumnIndex(CalendarContract.Events.TITLE)).equalsIgnoreCase(contentDatum.getGist().getTitle())
                                        && cursor.getString(cursor.getColumnIndex(CalendarContract.Events.DESCRIPTION)).equalsIgnoreCase(contentDatum.getGist().getDescription())) {
                                    Toast.makeText(getCurrentContext(), "Event already exists in your calendar.", Toast.LENGTH_SHORT).show();
                                    calendarEventExist = true;
                                    break;
                                }
                            } while (cursor.moveToNext());

                        }
                    }
                } else {
                    calendarEventExist = false;
                }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...