【发布时间】:2021-07-20 06:40:00
【问题描述】:
我可以使用以下示例 sn-ps 轻松获取每个联系人的每个电子邮件地址的列表:
//...
private val getPerson = registerForActivityResult(PickContact()) {
it?.also { contactUri ->
val personDetails = ContactForPerson("", "", "")
val projection = arrayOf(
ContactsContract.CommonDataKinds.Phone.LOOKUP_KEY, //String
ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME_PRIMARY,//String
ContactsContract.CommonDataKinds.Email.ADDRESS, //String
)
context?.contentResolver?.query(contactUri, projection, null, null, null)?.apply {
moveToFirst()
personDetails.apply {
uri = getStringOrNull(0)
name = getString(1)
email = getStringOrNull(2)
}
close()
}
}
}
//...
fab.setOnClickListener {
//...
getPerson.launch(0)
//...
}
//...
class PickContact : ActivityResultContract<Int, Uri?>() {
override fun createIntent(context: Context, input: Int?) =
Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI).also {
it.type = ContactsContract.CommonDataKinds.Email.CONTENT_TYPE
}
override fun parseResult(resultCode: Int, intent: Intent?): Uri? =
if (resultCode == RESULT_OK) intent?.data else null
}
问题是,既然我已经有了一些联系人的信息,有没有办法让我过滤每个联系人的每个电子邮件地址的巨大列表,只显示一个联系人的电子邮件地址?
我注意到Get specific contact information from URI returned from Intent.ACTION_PICK,但该信息已过时,不清楚是否需要 READ_CONTACTS 权限,这是不希望的。
谢谢。
【问题讨论】:
标签: android kotlin android-contacts android-contentresolver registerforactivityresult