阅读特定的联系信息
Posted
技术标签:
【中文标题】阅读特定的联系信息【英文标题】:reading specific contact information 【发布时间】:2014-10-23 23:39:37 【问题描述】:我目前正在开发一款 android 应用程序,该应用程序要求我读取设备上的所有联系人,并根据条件仅选择特定联系人(仅限具有至少一个有效手机号码和所有电子邮件地址的联系人)联系方式)。
我在https://***.com/a/19563999/3262731 尝试了推荐的方法,但在一个有大约 800 个联系人的测试设备上,检索所有记录然后过滤大约需要 17-20 秒。
理想情况下,我希望将条件构建到一个查询中,该查询将联系人数据库中的联系人、电话和电子邮件存储表连接起来,而不是在我的代码中进行过滤。
请问大家有什么建议吗?
【问题讨论】:
【参考方案1】:android 文档似乎包含您要查找的信息here。
private static final String[] PROJECTION =
/*
* The detail data row ID. To make a ListView work,
* this column is required.
*/
Data._ID,
// The primary display name
Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB ?
Data.DISPLAY_NAME_PRIMARY :
Data.DISPLAY_NAME,
// The contact's _ID, to construct a content URI
Data.CONTACT_ID
// The contact's LOOKUP_KEY, to construct a content URI
Data.LOOKUP_KEY (a permanent link to the contact
;
return new CursorLoader(getActivity(), contentUri, PROJECTION, SELECTION, SELECTION_ARGS, SORT_ORDER);
有关如何在文档中定义标准的更多详细信息。我认为这也比使用 ContentResolver 更快。
【讨论】:
感谢 Nelson,这是我的出发点,但它并不完全是我所需要的,并且文档本身并没有提供太多从不同联系人表(电子邮件、电话)获取数据的线索同时。【参考方案2】:根据http://developer.android.com/reference/android/provider/ContactsContract.Contacts.html
查询
如果您需要读取单个联系人,请考虑使用CONTENT_LOOKUP_URI
而不是CONTENT_URI
。 如果您需要通过电话号码查找联系人,请使用专门为此目的优化的PhoneLookup.CONTENT_FILTER_URI
。 如果您需要按部分姓名查找联系人,例如要生成按您输入的过滤器建议,请使用CONTENT_FILTER_URI URI
。 如果您需要通过电子邮件地址、昵称等数据元素查找联系人,请使用ContactsContract.Data
查询 桌子。结果将包含联系人 ID、姓名等。
【讨论】:
谢谢 Drakosha,但我想做的不是查找联系人 - 我想根据他们是否至少有 1 个联系人(名字、姓氏和手机号码)来检索手机号码并检索他们所有的电子邮件地址。以上是关于阅读特定的联系信息的主要内容,如果未能解决你的问题,请参考以下文章