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

Android:根据电话号码搜索联系人,android,android-sqlite,android-contacts,android-contentresolver,Android,Android Sqlite,Android Contacts,Android Contentresolver,我必须根据电话号码搜索联系人。下面是用于获取联系人的代码。我使用的Android API级别是15 String[] projection = new String[] { ContactsContract.CommonDataKinds.Phone._ID, ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME, ContactsCo

我必须根据电话号码搜索联系人。下面是用于获取联系人的代码。我使用的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”和“1234567890”的联系人。因为有些安卓手机会在手机号码之间留有空格

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

尝试以下方法:

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;
}
在您的代码中进行更改

constraint.toString()而不是write constain.replaceAll(“,”)

要删除字符串中的所有空格,请尝试以下操作:

String whereName = ContactsContract.Data.MIMETYPE + " = ?";
String number;
String[] whereNameParams = new String[] { ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE };
Cursor nameCur = con.query(ContactsContract.Data.CONTENT_URI, null, whereName, whereNameParams, ContactsContract.CommonDataKinds.Phone.NUMBER);


while (nameCur.moveToNext()) {
    number = nameCur.getString(nameCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));

    if (number != null) {
        if (number.contains(num)) {
            System.out.println(number);

        }
    }

}
nameCur.close();
在上一次的回答评论中说: “我正在尝试搜索以“1234”开头的联系人,结果应返回电话号码为“1234567890”和“1234567890”的联系人。”


我的代码解决了这个问题。

约束中的每个字符之间添加
%
将是一种选择。长话短说,要按电话号码搜索,您需要使用
contacts contract.commondatatypes.phone.NORMALIZED\u number
,其中包含
E.164
格式的电话号码@SarwarErfan抱歉,我不能使用这个常量,我使用的API级别是15<代码>联系人contract.commonDataTypes.Phone.NORMALIZED_NUMBER
已添加到API 16中。对于较旧的API,请检查此问题:您是否能够找到解决方案?当我尝试搜索“1234”时,这是否会返回电话号码为“123 456 7890”的联系人?我想,当我们输入完整的电话号码时,这是有效的。是的,当我们输入完整的电话号码时,它是有效的。这是的完整副本,没有参考。干得好为了明确起见,我正在尝试搜索以“1234”开头的联系人,结果应该返回电话号码为“1234567890”和“1234567890”的联系人。一些安卓设备节省了与空间的接触。我如何检索两者?您好,请在您的回答中添加一些解释。您更愿意解释为什么您的代码将解决op问题。