第一次尝试在 Android 手机上获取联系人列表。 以下代码有效,并且列表已填充。 唯一的问题是,它不显示电子邮件地址,而是显示电话号码。 无法弄清楚这一点。
private fun getContacts() {
arrayList.clear()
val cursor = this.contentResolver
.query(
ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
arrayOf(
ContactsContract.CommonDataKinds.Phone.CONTACT_ID,
ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME_PRIMARY,
ContactsContract.CommonDataKinds.Phone.NUMBER,
ContactsContract.CommonDataKinds.Photo.PHOTO_URI,
ContactsContract.CommonDataKinds.Email.ADDRESS,
),null,null,
ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME_PRIMARY
)
while (cursor!!.moveToNext()) {
val contactID = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.CommonDataKinds.Phone.CONTACT_ID))
val contactName = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME_PRIMARY))
val contactNumber = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.CommonDataKinds.Phone.NUMBER))
val photo_uri = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.CommonDataKinds.Phone.PHOTO_URI))
val contactEmail = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.CommonDataKinds.Email.ADDRESS))
val obj = ContactModel()
obj.contid=contactID
obj.contname = contactName
obj.contnumber = contactNumber
if (contactEmail != null) {
obj.contemail=contactEmail
} else {
obj.contemail="No Email"
}
if(photo_uri != null){
obj.contPhoto = MediaStore.Images.Media.getBitmap(contentResolver,Uri.parse(photo_uri))
}
arrayList.add(obj)
}
rcvAdapter.notifyDataSetChanged()
cursor.close()
}
感谢对此的任何帮助。
问题似乎源于这样一个事实:电话内容提供商(您正在查询)可能包含每个联系人的多个条目,例如电话号码和电子邮件,但您只查询查询中的电话号码。因此,电子邮件地址字段未正确填充,并且列表显示电话号码而不是电子邮件地址。
要解决此问题,您应该单独向电子邮件内容提供商查询电子邮件,并将电子邮件地址与正确的联系人相关联。