如何使用部分电话号码在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中搜索联系人的主要内容,如果未能解决你的问题,请参考以下文章