Stack Overflow на русском Asked by tosh17 on November 27, 2021
Мне нужно получить список контактов из телефонной книги. На выходе нужны имена с телефонами и почтой
fun readPhoneBookContact(cr: ContentResolver): List<Contact> {
val order = ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME + " ASC"
val crContacts = cr.query(
ContactsContract.Contacts.CONTENT_URI,
null,null, null, order)
crContacts?.let { contacts ->
val listContact: MutableList<Contact> = mutableListOf()
while (contacts.moveToNext()) {
val contact = readContact(contacts, cr)
listContact.add(contact)
}
contacts.close()
return listContact.toList()
}
return listOf()
}
private fun getContactString(contact: Cursor, index: String) =
contact.getString(contact.getColumnIndex(index))
private fun readContact(contactCursor: Cursor, cr: ContentResolver): Contact {
val contact = Contact()
val id = getContactString(contactCursor, ContactsContract.Contacts._ID)
getContactString(contactCursor, ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)?.let {
contact.name = it
}
if (getContactString(contactCursor, ContactsContract.Contacts.HAS_PHONE_NUMBER).toInt() > 0) {
cr.query(
ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
null,
ContactsContract.CommonDataKinds.Phone.CONTACT_ID
+ " = ?",
arrayOf(id),
null
)?.let { crPhones ->
val setPhones = mutableSetOf<String>()
while (crPhones.moveToNext()) {
val phone: String = crPhones.getString(
crPhones
.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)
)
setPhones.add(phone)
}
crPhones.close()
contact.phones = setPhones.toList()
}
cr.query(
ContactsContract.CommonDataKinds.Email.CONTENT_URI,
null,
ContactsContract.CommonDataKinds.Email.CONTACT_ID
+ " = ?",
arrayOf(id),
null
)?.let { crEmails ->
val setEmails = mutableSetOf<String>()
while (crEmails.moveToNext()) {
val email: String = crEmails.getString(
crEmails
.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA)
)
setEmails.add(email)
}
crEmails.close()
contact.email = setEmails.toList()
}
}
return contact
}
Все работает, но у меня на телефоне(Номеров = 861 Emails= 232), но запрос выполняется 16 секунд.
В тех же месенжарах, книга открывается за секунду.
Возможно есть более быстрый способ чем вот этот код
Get help from others!
Recent Answers
Recent Questions
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP