首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ContactsContract按电话号码选择记录

ContactsContract按电话号码选择记录
EN

Stack Overflow用户
提问于 2018-04-28 13:53:55
回答 1查看 506关注 0票数 2

我可以使用下面的查询选择所有联系人

代码语言:javascript
复制
    cr = mActivity.getContentResolver();
    String selection = ContactsContract.Contacts.HAS_PHONE_NUMBER + " > 0";
    String orderBy = ContactsContract.Contacts.DISPLAY_NAME + " ASC ";
    Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, null, selection, null, orderBy);

但是,我有一个电话号码列表,我想创建这样的查询

代码语言:javascript
复制
String selection = ContactsContract.Contacts.PhoneNumber_or_something_else  in (MyPhoneNumberArray)

这有可能这样做吗?

在最坏的情况下,在创建游标之后,我可以使用do item删除相关项,但是,据我所知,我不能从游标中删除任何记录。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-29 06:38:47

联系人数据库分为三个主要表:

  1. Contacts -每个条目代表一个联系人,并将一个或多个RawContacts分组。
  2. RawContacts -每个条目代表一些SyncAdapter (例如Whatsapp、Google、Facebook、Viber)同步的联系人的数据,这个条目包含多个数据条目。
  3. Data -关于联系人、电子邮件、电话等的实际数据,每一行都是属于单个RawContact的单个数据。

联系人DB中的所有电话号码都在Data表中,所以这就是您需要查询的内容,您可以从该查询中获取CONTACT_ID的列表,并在需要时使用它获取有关联系人的一般信息。

代码语言:javascript
复制
String[] phonesList = new String[] { "+121212345" }; // will work better if all phones in this list are in e164 format

String[] projection = { Phone.CONTACT_ID, Phone.DISPLAY_NAME, Phone.NUMBER, Phone.NORMALIZED_NUMBER };
String selection = Phone.NUMBER + " IN ('" + TextUtils.join("','", phonesList) + "') OR " + 
                   Phone.NORMALIZED_NUMBER + " IN ('" + TextUtils.join("','", phonesList) + "')";
Cursor cur = cr.query(Phone.CONTENT_URI, projection, selection, null, null);

while (cur != null && cur.moveToNext()) {
    long id = cur.getLong(0);
    String name = cur.getString(1);
    String phone = cur.getString(2);
    Log.d(TAG, "got " + id + ", " + name + ", " + phone;
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50077278

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档