繁体   English   中英

从Android联系人数据库中搜索电话号码

[英]Search Phone numbers from Android Contact Database

我实现了AutocompleteView来搜索电话号码。 该代码在某些情况下可以正常工作。

我的代码:

Uri uri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI;
    String[] projection = new String[]{ContactsContract.CommonDataKinds.Phone._ID, ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME, ContactsContract.CommonDataKinds.Phone.NUMBER, ContactsContract.CommonDataKinds.Phone.TYPE};
    String selection = ContactsContract.CommonDataKinds.Phone.NUMBER + " LIKE ?";
    String[] selectionArgs = new String[]{"%" + charSequence.toString() + "%"};
    Cursor cursor = context.getContentResolver().query(uri, projection, selection, selectionArgs, ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME + " ASC");

如果电话号码中没有空格,此代码可以正常工作。 例如,如果我在autocompleteView中输入“ 123 ”,则它可以找到“ 9123456789”或“ 8283929383”之类的电话号码,但无法找到“ 9123 456 789”或“ 912 3456 789”

我什至尝试使用ContactsContract.PhoneLookup API来实现这一点,但与此根本不起作用。

使用ContactsContract.PhoneLookup API的代码:

String[] projection = new String[]{ContactsContract.PhoneLookup._ID, ContactsContract.PhoneLookup.DISPLAY_NAME, ContactsContract.PhoneLookup.NUMBER, ContactsContract.PhoneLookup.TYPE};

Uri uri = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode(charSequence.toString()));

Cursor cursor = context.getContentResolver().query(uri, projection, null, null, ContactsContract.PhoneLookup.DISPLAY_NAME + " ASC");

任何帮助表示赞赏。

而不是使用ContactsContract.CommonDataKinds.Phone.NUMBER ,请使用ContactsContract.CommonDataKinds.Phone.NORMALIZED_NUMBER (此返回E164格式的电话号码)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM