簡體   English   中英

Android 11 獲取聯系人的生日

[英]Android 11 get birthday of contacts

我正在嘗試查詢所有聯系人的生日。 這就是我正在使用的-

    private val PROJECTION: Array<out String> = arrayOf(
        ContactsContract.Contacts._ID,
        ContactsContract.Contacts.LOOKUP_KEY,
        ContactsContract.Contacts.DISPLAY_NAME_PRIMARY
    )

    private val SELECTION: String =
        "${ContactsContract.Data.MIMETYPE} = ? AND ${ContactsContract.CommonDataKinds.Event.TYPE} = ${ContactsContract.CommonDataKinds.Event.TYPE_BIRTHDAY}"

    // Defines a variable for the search string
    private val searchString: String = ContactsContract.CommonDataKinds.Event.CONTENT_ITEM_TYPE

    // Defines the array to hold values that replace the ?
    private val selectionArgs = arrayOf(searchString)
    override fun onCreateLoader(loaderId: Int, args: Bundle?): Loader<Cursor> {
        // Starts the query
        return activity?.let {
            return CursorLoader(
                it,
                ContactsContract.Contacts.CONTENT_URI,
                PROJECTION,
                SELECTION,
                selectionArgs,
                null
            )
        } ?: throw IllegalStateException()
    }

我正進入(狀態

Caused by: android.database.sqlite.SQLiteException: no such column: mimetype (code 1 SQLITE_ERROR): , while compiling: SELECT _id, lookup, display_name FROM view_contacts WHERE ((1)) AND (mimetype = ? AND data2 = 3)

是否已從 Android 11 中刪除了mimetype字段? 任何幫助將不勝感激。 謝謝。

ContactsContract.Contacts.CONTENT_URI表只包含非常通用的聯系信息,如_ID、DISPLAY_NAME 等。它不包含聯系人的實際數據,如電話、電子郵件、事件等。

這些存儲在單獨的表ContactsContract.Data.CONTENT_URI ,因此您需要將 cursorLoader 中的表更改為該表。

此外,您的投影需要更改為:

private val PROJECTION: Array<out String> = arrayOf(
    Data.CONTACT_ID,
    Contacts.LOOKUP_KEY,
    Contacts.DISPLAY_NAME
)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM