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)
mimetype
字段是否已从 Android 11 中删除?任何帮助将不胜感激。谢谢。
ContactsContract.Contacts.CONTENT_URI
的 table 仅包含非常通用的联系信息,如 _ID、DISPLAY_NAME 等。
它不包含联系人的实际数据,例如电话、电子邮件、事件等
它们存储在单独的 table ContactsContract.Data.CONTENT_URI
中,因此您需要将 cursorLoader 中的 table 更改为那个。
此外,您的投影需要更改为:
private val PROJECTION: Array<out String> = arrayOf(
Data.CONTACT_ID,
Contacts.LOOKUP_KEY,
Contacts.DISPLAY_NAME
)
我想查询所有联系人的生日。这就是我正在使用的 --
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)
mimetype
字段是否已从 Android 11 中删除?任何帮助将不胜感激。谢谢。
ContactsContract.Contacts.CONTENT_URI
的 table 仅包含非常通用的联系信息,如 _ID、DISPLAY_NAME 等。
它不包含联系人的实际数据,例如电话、电子邮件、事件等
它们存储在单独的 table ContactsContract.Data.CONTENT_URI
中,因此您需要将 cursorLoader 中的 table 更改为那个。
此外,您的投影需要更改为:
private val PROJECTION: Array<out String> = arrayOf(
Data.CONTACT_ID,
Contacts.LOOKUP_KEY,
Contacts.DISPLAY_NAME
)