我正在尝试使用日历提供程序将系统日历集成到我的应用程序中。 但不幸的是,我在不同的设备上有不一致的响应。日历提供程序未提供作为查询请求的最新/完整信息。
这发生在我的日历和活动提供者身上。作为参考,我附上了我的阅读日历功能。
fun getAllCalendars(context: Context): ArrayList<GoogleCalendar>{
val gCalendars: ArrayList<GoogleCalendar> = ArrayList()
if (ActivityCompat.checkSelfPermission(context,
Manifest.permission.READ_CALENDAR) == PackageManager.PERMISSION_GRANTED) {
val CALENDAR_PROJECTION: Array<String> = arrayOf(
CalendarContract.Calendars._ID,
CalendarContract.Calendars.ACCOUNT_NAME,
CalendarContract.Calendars.CALENDAR_DISPLAY_NAME,
CalendarContract.Calendars.OWNER_ACCOUNT
)
val calendarUri: Uri = CalendarContract.Calendars.CONTENT_URI
val calendarsCursor: Cursor? = context.contentResolver.query(calendarUri, CALENDAR_PROJECTION,
null, null, "${CalendarContract.Calendars._ID} ASC")
try {
if (calendarsCursor!!.count > 0) {
calendarsCursor.moveToFirst()
// fetching calendars
while (calendarsCursor.moveToNext()) {
val googleCalendar = GoogleCalendar()
if (calendarsCursor.getString(0) != null) googleCalendar.calendar_id = calendarsCursor.getLong(0)
if (calendarsCursor.getString(1) != null) googleCalendar.accountName = calendarsCursor.getString(1)
if (calendarsCursor.getString(2) != null) googleCalendar.calendarDisplayName = calendarsCursor.getString(2)
if (calendarsCursor.getString(3) != null) googleCalendar.ownerAccount = calendarsCursor.getString(3)
gCalendars.add(googleCalendar)
calendarsCursor.moveToNext()
}
}
} catch (ae: AssertionError) {
ae.printStackTrace()
} catch (e: Exception) {
e.printStackTrace()
}
}
return gCalendars
}
我的系统日历有 3 个日历,分别是活动日历、生日日历和假期日历。但作为回应,只得到 1 个联系人日历。请查看屏幕截图。
Calendar Screen with 3 calendars Code output screen with only one calendar
提前致谢。