我正在以编程方式创建日历事件(Android平台)。
以下是我的代码:
在这里,用户有权选择计划 date(planDate.value
),开始时间(planStartTime.value
),结束时间({{1} }),然后输入计划名称(planEndTime.value
)
planName.value
当我尝试创建事件时,在少数设备中,事件会成功创建并保留。
但是在很少的设备(例如Samsung Galaxy J7 Prime)中根本不会创建事件。没有创建事件的设备,在insert方法之后我得到了eventID。
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)
}
}
在var eventUri: Uri = context.contentResolver.insert(CalendarContract.Events.CONTENT_URI, values)
中创建了事件,但几秒钟后,事件从日历中消失了。
我为所有这些设备使用相同的代码。
有人可以帮我吗?如果我做错了任何事情,请告诉我。
谢谢。