使用电话号码搜索联系人

Posted

技术标签:

【中文标题】使用电话号码搜索联系人【英文标题】:Searching for a contact using phone number 【发布时间】:2013-01-02 17:26:24 【问题描述】:

我正在开发接收来电和传入短信的广播意图的 android 应用程序。

然后它应该获取传入号码并使用传入号码对用户联系人执行搜索。

这是一个不太工作,但我有一个小问题。我让它工作,以便在联系人列表中搜索号码,如果它以 + 开头,则去除前 3 个字符并在开头放置一个 0,或者如果它不包含 +,则只进行搜索。但是,我有一个小问题,如果用户在号码中输入空格,那么应用程序找不到联系人。例如,如果我有一个保存为 07412xxxxxx 的联系人号码,而传入的号码是 07412xxxxxx+447412xxxxxx。但是,如果联系人号码保存为`07412 xxx xxxand the incoming number is07412xxxxxx`,则无法识别该号码,因此找不到联系人姓名。

如何执行搜索以全面考虑数字格式。下面是我目前正在使用的代码。

public String getContactNameFromNumber(String number)
    

        if (number.startsWith("+"))
        
            number = "0" + number.substring(3);
        

        String contactName = null;
        ContentResolver contentResolver = context.getContentResolver();

        Uri uri = Data.CONTENT_URI;
        String[] projection = new String[] PhoneLookup._ID, PhoneLookup.DISPLAY_NAME;
        String selection = ContactsContract.CommonDataKinds.Phone.NUMBER + " = ?";
        String[] selectionArgs =  number ;
        Cursor cursor = contentResolver.query(uri, projection, selection, selectionArgs, null);

        if (cursor.moveToFirst())
        

            contactName = cursor.getString(cursor.getColumnIndexOrThrow(PhoneLookup.DISPLAY_NAME));
            cursor.close();
            return contactName;
        
        else
        
            cursor.close();
            return null;
        
    

【问题讨论】:

作为一个小问题,国际国家代码可以有 1、2 或 3 位数字(请参阅 here),因此在处理以 @987654327 开头的数字时,您可能需要检查更多替代方案@. @Simon 谢谢你,不知道 【参考方案1】:

试试:

String selection = "REPLACE (" + ContactsContract.CommonDataKinds.Phone.NUMBER + ", \" \" , \"\" ) = ?";

见replace函数。

【讨论】:

感谢您的帮助,完美运行。我会给你赏金,但出于某种原因,我又等了 11 个小时

以上是关于使用电话号码搜索联系人的主要内容,如果未能解决你的问题,请参考以下文章

使用电话号码搜索联系人

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

如何按姓名和电话号码搜索联系人?

搜索联系人并从android中的电话联系人中获取联系人号码

使用号码搜索 iPhone 地址簿

从 Google People API 搜索中获取姓名和电话号码