我正在尝试在Android应用程序中实现一个功能,作为数字中的用户键,我想逐步搜索电话簿(通用电话簿搜索)中的这些数字并显示结果。
为此,我正在使用
Uri.withAppendedPath(ContactsContract.CommonDataKinds.Phone.CONTENT_FILTER_URI,Uri.encode(aNumber));
这似乎适用于大多数情况,并正在处理搜索“等”
我无法解决2个问题:
所以,例如如果我有一个号码:+ 9199776xx123 当我的搜索字符串是+9199时,结果出现了。如果我的搜索字符串是9977,则不会出现。
所以电话的CONTENT_FILTER_URI的行为对我来说并不是很清楚。
P.S。 :我已经尝试过PhoneLookup,但出于某种原因,它不会抛出任何结果。我的信念是它可能无法搜索部分数字。
答案 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 ?";