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

Use*_*111 7 android android-contentresolver android-contacts android-sqlite

我必须根据电话号码搜索联系人.以下是用于获取联系人的代码.我使用的Android API级别是15

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

        Cursor query = mContent.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, projection,
                    ContactsContract.CommonDataKinds.Phone.NUMBER + " LIKE '%" + constraint.toString() + "%'"
                    ,null, ContactsContract.Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC");
Run Code Online (Sandbox Code Playgroud)

我能够在联系人表格中保存的电话号码中获取与空格无关的联系人.如果电话号码之间有空格,则上述查询失败.例如,对于联系人,如果电话号码保存为1234567890,而当我使用值1234搜索时,将检索此联系人.但如果联系人保存为"123 456 7890",则会失败.

最重要的是,当我尝试搜索包含或包含"1234"电话号码的联系人时,结果应该返回电话号码为"1234567890"和"123 4567 890"的联系人.由于一些Android手机节省了电话号码之间的空间.

我该如何解决这个问题.任何帮助表示赞赏.

小智 0

尝试这个:

public String getContactNameByNumber(String number) {
    Uri uri = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode(number));
    String name = "?";

    ContentResolver contentResolver = getContentResolver();
    Cursor contact = contentResolver.query(uri, new String[] {BaseColumns._ID,
            ContactsContract.PhoneLookup.DISPLAY_NAME }, null, null, null);

    try {
        if (contact != null && contact.getCount() > 0) {
            contact.moveToNext();
            name = contact.getString(contactLookup.getColumnIndex(ContactsContract.Data.DISPLAY_NAME));
        }
    } finally {
        if (contact != null) {
            contact.close();
        }
    }

    return name;
}
Run Code Online (Sandbox Code Playgroud)