如何使用部分电话号码在android中搜索联系人

Posted

技术标签:

【中文标题】如何使用部分电话号码在android中搜索联系人【英文标题】:How to search for contacts in android with partial phone number 【发布时间】:2019-02-11 19:06:08 【问题描述】:

我正在尝试使用以下代码在我的 android 应用程序中使用部分电话号码对联系人进行模糊搜索。但是我的搜索功能总是没有结果。

例如,

我与电话号码 1234567890 联系,名称为“示例”。

fuzzySearch("4567"); 应该返回名为“example”的联系人。

有人可以指出我哪里错了吗?我已经检查了here。但以运行时sql查询错误结束。

public ArrayList<Contact> fuzzySearch(String match) 
    private static final String SELECTION = Phone.NUMBER + " LIKE ? COLLATE NOCASE";

    Uri uri = Uri.withAppendedPath(ContactsContract.CommonDataKinds.Phone.CONTENT_FILTER_URI, Uri.encode(match));

    String[] projectionFields = new String[]ContactsContract.Contacts._ID, Phone.NUMBER;

    CursorLoader cursorLoader = null;

    ArrayList<Contact> listContacts = new ArrayList<>();

    if(match.trim().length() == 0)
       return listContacts;
    else 
        cursorLoader = new CursorLoader(context, uri, projectionFields, SELECTION, new String[]"%"+match+"%", Phone.NUMBER);
    

    Cursor c = cursorLoader.loadInBackground();

    final Map<String, Contact> contactsMap = new HashMap<>(c.getCount());

    if (c.moveToFirst()) 
        int idIndex = c.getColumnIndex(ContactsContract.Contacts._ID);
        int nameIndex = c.getColumnIndex(Phone.NUMBER);

        do 
            String contactId = c.getString(idIndex);
            String contactDisplayName = c.getString(nameIndex);
            Contact contact = new Contact(contactId, contactDisplayName);
            contactsMap.put(contactId, contact);
            listContacts.add(contact);
         while (c.moveToNext());
    

    c.close();
    return listContacts;

【问题讨论】:

【参考方案1】:

使用 PhoneLookup 代替电话。 因为您已经将搜索键编码到 URL 中,所以不需要 SELECTION,请将其删除。

   Uri uri = Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI, Uri.encode(match));
   Cursor cur = resolver.query(uri, new String[]PhoneLookup.DISPLAY_NAME,PhoneLookup.NUMBER, PhoneLookup.CONTACT_ID, null, null, null);

【讨论】:

以上是关于如何使用部分电话号码在android中搜索联系人的主要内容,如果未能解决你的问题,请参考以下文章

搜索联系人并从android中的电话联系人中获取联系人号码

Android:根据电话号码搜索联系人

使用电话号码搜索联系人

使用部分搜索字符串搜索联系人

如何使用带有电话号码的 Firebase DB 过滤联系人列表

android 车机电话的通讯录联系人搜索实现解析 ------- 填坑日记