日历提供程序未提供最新数据

时间:2021-04-05 12:58:11

标签: android kotlin calendar android-contentprovider android-contentresolver

我正在尝试使用日历提供程序将系统日历集成到我的应用程序中。 但不幸的是,我在不同的设备上有不一致的响应。日历提供程序未提供作为查询请求的最新/完整信息。

这发生在我的日历和活动提供者身上。作为参考,我附上了我的阅读日历功能。

    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

提前致谢。

0 个答案:

没有答案
相关问题