Android: события CalendarProvider не создаются и иногда исчезают после создания (на нескольких устройствах) - PullRequest
0 голосов
/ 09 июля 2019

Я создаю событие календаря программно (на платформе Android).

Вот мой кусок кода: Здесь пользователь имеет право выбрать план дата (planDate.value) , время начала (planStartTime.value) , время окончания (planEndTime.value) и ввести план имя (planName.value)

private fun createCalendarEvent(context: Context) {
        val startDateObj = SimpleDateFormat(simpleDateFormateMM, Locale.US).parse("${planDate.value} ${planStartTime.value}") // Here I am fetching data selected by user
        val endDateObj = SimpleDateFormat(simpleDateFormateMM, Locale.US).parse("${planDate.value} ${planEndTime.value}")

        val calendar = Calendar.getInstance()
        calendar.time = startDateObj

        val startMillis: Long = Calendar.getInstance().run {
            // month starts from 0
            set(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH), calendar.get(Calendar.HOUR_OF_DAY), calendar.get(Calendar.MINUTE))
            timeInMillis
        }
        calendar.time = endDateObj
        val endMillis: Long = Calendar.getInstance().run {
            set(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH), calendar.get(Calendar.HOUR_OF_DAY), calendar.get(Calendar.MINUTE))
            timeInMillis
        }

        val values = ContentValues().apply {
            put(CalendarContract.Events.DTSTART, startMillis)
            put(CalendarContract.Events.DTEND, endMillis)
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                put(CalendarContract.Events.CALENDAR_ID, 3)
            } else {
                put(CalendarContract.Events.CALENDAR_ID, 1)
            }
            put(CalendarContract.Events.TITLE, planName.value)
            put(CalendarContract.Events.EVENT_TIMEZONE, TimeZone.getDefault().id)
        }
        if (!PermissionUtils(context).checkPermission(PermissionUtils.WRITE_CALENDAR)) {
            context.contentResolver.insert(CalendarContract.Events.CONTENT_URI, values)
        }
    }

Когда я пытаюсь создать событие, на нескольких устройствах события создаются успешно и остаются.

Но в некоторых устройствах (например, Samsung Galaxy J7 Prime) события не создаются вообще. Устройство, на котором события не созданы, я получаю eventID после метода вставки.

var eventUri: Uri = context.contentResolver.insert(CalendarContract.Events.CONTENT_URI, values)

В Huawei CAG-L22 событие создается, но через несколько секунд оно исчезает из календаря.

Я использую один и тот же код для всех этих устройств.

Может кто-нибудь помочь мне с этим? Пожалуйста, дайте мне знать, если я делаю что-то не так.

Заранее спасибо.

...