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

标签 android android-sqlite android-contacts android-contentresolver

我必须根据电话号码搜索联系人。这是用于获取联系人的代码。我使用的 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");

我能够获取联系人表中保存的电话号码中没有空格的联系人。如果电话号码之间有空格,则上述查询失败。例如,对于联系人,如果电话号码保存为 1234567890 并且当我使用值 1234 进行搜索时,将检索到该联系人。但如果联系人保存为“123 456 7890”,则会失败。

最重要的是,当我尝试搜索具有或包含电话号码“1234”的联系人时,结果应该返回电话号码为“1234567890”和“123 4567 890”的联系人。由于一些 Android 手机保存电话号码之间有空格。

我该如何解决这个问题。感谢您的帮助。

最佳答案

试试这个:

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;
}

关于Android:根据电话号码搜索联系人,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25721975/

相关文章:

java - Jsoup 获取值 =""中的元素

android如何在java类中使用字符串资源

sqlite - session 室数据库迁移失败 : ALTER TABLE to add multiple columns

java - 如何在 Android 中将原始 java.lang.Bytes[] 保存到 SQLite BLOB?

java - 如何在 Applozic 中通过用户 ID 获取联系人的显示名称?

java - Android Studio httpURLConnection 应用程序崩溃

java - 当我添加 facebook 登录和 SDK 依赖项时出现重复的类错误

mysql - 如果最后一条记录与之前的记录重复,则android-db查询获取最后一条记录或组中的第一条

android - 如何使自定义帐户像 Google/LinkedIn/Facebook 一样显示在 native 联系人应用程序中?

android - 首先添加姓名为 Family name 的联系人