在Android代码中搜索电话号码

时间:2016-11-10 06:27:33

标签: java android contacts android-contacts

我正在尝试在Android应用程序中实现一个功能,作为数字中的用户键,我想逐步搜索电话簿(通用电话簿搜索)中的这些数字并显示结果。

为此,我正在使用

Uri.withAppendedPath(ContactsContract.CommonDataKinds.Phone.CONTENT_FILTER_URI,Uri.encode(aNumber));

这似乎适用于大多数情况,并正在处理搜索“等”

我无法解决2个问题:

  1. 它不会忽略国家/地区代码。
  2. 所以,例如如果我有一个号码:+ 9199776xx123 当我的搜索字符串是+9199时,结果出现了。如果我的搜索字符串是9977,则不会出现。

    1. 不从中间搜索。 当我的搜索字符串是776时,结果也没有出现。
    2. 所以电话的CONTENT_FILTER_URI的行为对我来说并不是很清楚。

      P.S。 :我已经尝试过PhoneLookup,但出于某种原因,它不会抛出任何结果。我的信念是它可能无法搜索部分数字。

2 个答案:

答案 0 :(得分:0)

Phone.CONTENT_FILTER_URI专为速度而设计,但它并不完美,正如您所注意到的那样。 您可以使用普通Phone.CONTENT_URI来处理您想要的任何类型的请求。

e.g:

String partialPhone = "9977";
String[] projection = new String[] {Phone.DISPLAY_NAME, Phone.NUMBER, Phone. NORMALIZED_NUMBER};
String selection = "(" + Phone.NUMBER + " LIKE %" + partialPhone + "%) OR (" + Phone.NORMALIZED_NUMBER + " LIKE %" + partialPhone + "%)";
Cursor c = cr.query(Data.CONTENT_URI, projection, selection, null, null);

答案 1 :(得分:0)

经过大量研究或研究后,我找到了答案。现在,我搜索列,数字和标准化数字。这样可以处理这两种情况,因为标准化数字包含数字中的国家代码。

我的选择字符串如下:

            String selection = ContactsContract.CommonDataKinds.Phone.NUMBER + " LIKE ? OR "
                + ContactsContract.CommonDataKinds.Phone.NORMALIZED_NUMBER + " LIKE ?";