Событие синхронизации добавлено программно с календарем Google в android

Я пытаюсь добавить событие в календарь Android, и я указываю, что событие будет добавлено в календарь gmail, чтобы автоматически синхронизировать с календарем Google. Проблема состоит в том, что события добавляются программно, не синхронизируются с календарем Google, но если я добавлю его вручную на телефон, он синхронизируется с календарем Google. Я не знаю, почему.

Это код, который я использую для добавления события:

ArrayList<MyCalendar> calendars = new ArrayList<MyCalendar>(); String[] projection = new String[] { "_id", "name" }; Uri calUri = getCalendarURI(false); Cursor managedCursor = managedQuery(calUri, projection, "selected=1", null, null); String calName = null; String calId = null; if (managedCursor.moveToFirst()) { int nameColumn = managedCursor.getColumnIndex("name"); int idColumn = managedCursor.getColumnIndex("_id"); do { calName = managedCursor.getString(nameColumn); calId = managedCursor.getString(idColumn); calendars.add(new MyCalendar(Integer.parseInt(calId), calName)); } while (managedCursor.moveToNext()); } Toast.makeText(getBaseContext(), calName + " " + calId, Toast.LENGTH_LONG).show(); Calendar cal = Calendar.getInstance(); ContentValues event = new ContentValues(); event.put("calendar_id", 2); event.put("title", "Test Event2"); event.put("description", "Hiii Buddy"); long startTime = cal.getTimeInMillis(); long endTime = cal.getTimeInMillis() + 60 * 60 * 1000; event.put("dtstart", startTime); event.put("dtend", endTime); event.put("allDay", 0); event.put("eventStatus", 1);// tentative 0, confirmed 1 canceled 2 event.put("visibility", 3);// default 0 confidential 1 private 2 // public 3 event.put("transparency", 0);// opaque 0 transparent 1 event.put("hasAlarm", 1); // 0 false, 1 true Uri eventsUri = getCalendarURI(true); Uri url = getContentResolver().insert(eventsUri, event); 

Таким образом, событие успешно добавлено в календарь, но оно не отображается в календаре Google в Интернете (не синхронизируется), но если я добавлю событие вручную, он синхронизируется !!!

Вы можете синхронизировать свое событие после добавления его этой функцией, оно работает для меня (в API 8 и более поздних версиях):

 public static void syncCalendar(Context context, String calendarId) { ContentResolver cr = context.getContentResolver(); ContentValues values = new ContentValues(); values.put(CalendarContract.Calendars.SYNC_EVENTS, 1); values.put(CalendarContract.Calendars.VISIBLE, 1); cr.update( ContentUris.withAppendedId(getCalendarUri(), Long.parseLong(calendarId)), values, null, null); } 

Попробуйте этот код, чтобы вставить событие в календарь Android, а также в календарь Google:

  ContentValues values = new ContentValues(); cal_id = String.valueOf(p1); values.put("calendar_id", p1); values.put("title", title1); values.put("allDay", 0); values.put("dtstart", settime); values.put("dtend", cal.getTimeInMillis()+60*60*1000); values.put("description", desc1); values.put("visibility", 0); values.put("transparency", 0); values.put("hasAttendeeData", 1); values.put("hasAlarm", 0); event = cr.insert(EVENTS_URI, values); event1=event; dat1 = event.toString(); long id=-1; if (event != null) { id = Long.parseLong(event.getLastPathSegment()); ContentValues values1 = new ContentValues(); values1.put("event_id", id); values1.put("method", 1); //METHOD_ALERT Uri reminder = Uri.parse(getCalendarUriBase(this) + "reminders"); this.getContentResolver().insert(reminder, values1); if(s.length() > 0 || partmail.length() > 0) { //REQUIRES FOLLOWING CODE 

Этот код используется для добавления события, синхронизированного в календарь Google

  ContentValues attendees = new ContentValues(); attendees.put("event_id", id); attendees.put("attendeeEmail", partmail1); attendees.put("attendeeRelationship", 2);//RELATIONSHIP_ATTENDEE attendees.put("attendeeStatus", 3); //ATTENDEE_STATUS_INVITED attendees.put("attendeeType", 1); //TYPE_REQUIRED id1=(int)id; alarmid = (int) id; Uri attendeesUri = null; if (Integer.parseInt(Build.VERSION.SDK) >= 8 ) { attendeesUri = Uri.parse("content://com.android.calendar/attendees"); } else if(Integer.parseInt(Build.VERSION.SDK) < 8) { attendeesUri = Uri.parse("content://calendar/attendees"); } this.getContentResolver().insert(attendeesUri, attendees); Toast.makeText(this, "Task Scheduled Successfully", Toast.LENGTH_SHORT).show(); } else { Toast.makeText(this, "Could not create Task!", Toast.LENGTH_SHORT); } // reminder insert Uri REMINDERS_URI = Uri.parse(getCalendarUriBase(this) + "reminders"); values = new ContentValues(); values.put( "event_id", id); values.put( "method", 1 ); values.put( "minutes", 0 ); cr.insert( REMINDERS_URI, values ); 

Получить Uri Calendar, поскольку он отличается для уровней API, таких как до 8, больше 8 и более 11.

 private String getCalendarUriBase(Context con) { String calendarUriBase = null; Uri calendars = Uri.parse("content://calendar/calendars"); Cursor managedCursor = null; try { managedCursor = managedQuery(calendars, null, null, null, null); } catch (Exception e) { // eat } if (managedCursor != null) { calendarUriBase = "content://calendar/"; } else { calendars = Uri.parse("content://com.android.calendar/calendars"); try { managedCursor = managedQuery(calendars, null, null, null, null); } catch (Exception e) { // statement to print the stacktrace } if (managedCursor != null) { calendarUriBase = "content://com.android.calendar/"; } } return calendarUriBase; 

}

Используйте предоставленный здесь google calender api

Вышеупомянутая ссылка несколько общая, поскольку Android не предоставляет официальный API. Итак, еще одно решение, более специфичное для Android, – это Android-учебник-программирование с календарем

Который также содержит рабочий пример. Кроме того, будьте осторожны в Permission Declaration, например READ_CALENDAR, WRITE_CALENDAR

Intereting Posts
Как изменить кадр обрезки изображения? Является ли dexguard предотвращением простых латексных трещин? Можно ли обнаружить движение, когда экран выключен? Android Hello World в IntelliJ 12 – Не удается найти класс android.app.Activity GetView не вызван? Google Firebase сериализует / десериализует Какая логика используется при сравнении местоположения с несколькими пользователями Получают ли потоки автоматически мусор, собранный после выхода метода run () в Java? Получить слово из EditText в текущей позиции курсора Я ищу api, который предоставляет тексты для запрошенной песни Можно ли использовать Android 4 HttpResponseCache с помощью приложения на основе WebView? Метод makeText в типе типа Toast не применим для аргументов Что называется после "onConfigurationChanged ()"? SQLite Random () В ORDER BY не сортируется правильно Как открыть навигационный ящик без панели действий, открыть с помощью одной кнопки