Я создаю календарь и вставляю в него событие. Затем после удаления с помощью Samsung Calendar событие не было удалено, а помечено как удаленное. Когда я пытаюсь вставить событие с тем же идентификатором, eventUri
имеет значение NULL, и событие не отображается в календаре. Эта проблема возникает только на устройствах Samsung.
Создание календаря:
private fun createLocalCalendar(calendarName: String): String {
val uri = createCalendarUri(calendarName)
val values = createCalendarValues(calendarName)
return contentResolver.insert(uri, values).lastPathSegment
}
private fun createCalendarValues(calendarName: String) = ContentValues().apply {
put(CalendarContract.Calendars.ACCOUNT_NAME, calendarName)
put(CalendarContract.Calendars.ACCOUNT_TYPE, CalendarContract.ACCOUNT_TYPE_LOCAL)
put(CalendarContract.Calendars.NAME, calendarName)
put(CalendarContract.Calendars.CALENDAR_DISPLAY_NAME, calendarName)
put(CalendarContract.Calendars.OWNER_ACCOUNT, calendarName)
put(CalendarContract.Calendars.CALENDAR_TIME_ZONE, TimeZone.getDefault().id)
put(
CalendarContract.Calendars.CALENDAR_ACCESS_LEVEL,
CalendarContract.Calendars.CAL_ACCESS_OWNER
)
}
private fun createCalendarUri(calendarName: String) =
CalendarContract.Calendars.CONTENT_URI.buildUpon().apply {
appendQueryParameter(CalendarContract.Calendars.ACCOUNT_NAME, calendarName)
appendQueryParameter(CalendarContract.CALLER_IS_SYNCADAPTER, "true")
appendQueryParameter(
CalendarContract.Calendars.ACCOUNT_TYPE,
CalendarContract.ACCOUNT_TYPE_LOCAL
)
}.build()
Создание события:
val eventValues = createCalendarEventValues(calendarId, event)
private fun createCalendarEventValues(calendarId: String) =
ContentValues().apply {
put(CalendarContract.Events.CALENDAR_ID, calendarId)
put(CalendarContract.Events._ID, "123")
put(CalendarContract.Events.TITLE, "title")
put(CalendarContract.Events.HAS_ALARM, 1)
put(CalendarContract.Events.EVENT_TIMEZONE, TimeZone.getDefault().id)
put(
CalendarContract.Events.DTSTART,
Calendar.getInstance().run {
set(2019, 10, 11, 7, 30)
timeInMillis
}
)
put(
CalendarContract.Events.DTEND,
Calendar.getInstance().run {
set(2019, 10, 11, 8, 30)
timeInMillis
}
)
}
Вставка события в календарь:
val eventUri = contentResolver.insert(CalendarContract.Events.CONTENT_URI, eventValues)