【问题标题】:how to implement search contacts using number in ContactsContract query. Like "display_name LIKE ?" for name如何在 ContactsContract 查询中使用号码实现搜索联系人。像“display_name LIKE?”为名
【发布时间】:2019-01-20 17:38:20
【问题描述】:

我想根据提供的号码搜索联系人。

我已使用 ContactsContract 读取所有联系人。我已经通过证明 searchView 实现了基于名称的搜索条件,并且将显示匹配的名称,但我也想按数字执行相同的操作

private List<ContactItem> getContacts(String s) {
    String whereString = "display_name LIKE ?";
    String[] whereParams = new String[]{ "%" + s + "%"};
    ContentResolver cr = getContentResolver();
    Cursor cur = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, whereString, whereParams, null);
    List<ContactItem> contacts = new ArrayList<>();
    assert cur != null;
    while (cur.moveToNext()) {

        String name = cur.getString(cur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
        String phoneNumber = cur.getString(cur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));

        contacts.add(new ContactItem(name,phoneNumber));
    }
    cur.close();
    return contacts;
}

我想在这里使用电话号码而不是 display_name。如何做到这一点

【问题讨论】:

  • 参见ContactsContract.CommonDataKinds.Phone#CONTENT_FILTER_URI - "使用过滤器查找电话的 content:// 样式 URL。过滤器返回 MIME 类型 CONTENT_ITEM_TYPE 的记录。过滤器应用于显示名称以及电话号码。过滤器参数应作为此 URI 之后的附加路径段传递。"

标签: android android-contacts contactscontract


【解决方案1】:

试试下面的代码,应该根据名字和号码进行过滤:

private List<ContactItem> getContacts(String numberOrName) {
    Uri searchUri = Uri.withAppendedPath(Phone.CONTENT_FILTER_URI, Uri.encode(numberOrName));

    String[] projection = new String[] { Phone.DISPLAY_NAME, Phone.NUMBER };
    Cursor cur = getContentResolver().query(searchUri, projection, null, null, null);

    List<ContactItem> contacts = new ArrayList<>();
    assert cur != null;
    while (cur.moveToNext()) {

        String name = cur.getString(0);
        String phoneNumber = cur.getString(1);

        contacts.add(new ContactItem(name, phoneNumber));
    }
    cur.close();
    return contacts;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-26
    • 2014-11-03
    相关资源
    最近更新 更多