使用电话号码获取联系人姓名

Posted

技术标签:

【中文标题】使用电话号码获取联系人姓名【英文标题】:Getting ContactName using phone number 【发布时间】:2015-06-01 02:45:06 【问题描述】:

我正在创建一个列出用户最近呼叫的活动。要求是当用户接到呼叫时,phone numbercontact name 存储在 DB 中,以便稍后在活动中显示。要检索联系人姓名,电话号码与用户联系人列表中的联系人匹配。我正在使用下面的代码来获取联系人姓名。

(以下代码查询联系人数据库并找到与输入的电话号码匹配)

 String getContactDisplayNameByNumber(String number) 
        Uri uri = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode(number));
        String name = "";

        Cursor contactLookup = context.getContentResolver().query(uri, new String[]
                ContactsContract.PhoneLookup.DISPLAY_NAME, null, null, null);

        try 
            if (contactLookup != null && contactLookup.moveToNext()) 
                name = contactLookup.getString(contactLookup.getColumnIndex(ContactsContract.Data.DISPLAY_NAME));
                Log.v("ranjapp", "Name is " + name + " Number is " + number);
            
         finally 
            if (contactLookup != null) 
                contactLookup.close();
            
        
        return name;
    

现在的问题是电话号码在联系人列表中保存为“1234567891”,而从来电中检索到的电话号码是“01234567891”(前缀为0)。 由于来电号码前缀为 0,因此该号码与联系人列表中的号码不匹配。

还有其他可能性,来电号码可能带有国家代码前缀,而保存的联系人没有。

在这些情况下我该如何匹配。

(我知道PhoneNumberUtils.compare(),但无法在提到的代码中应用它)。

【问题讨论】:

你能以某种方式使用包含吗? 无法使用包含。也包含不适用于所有场景。 在使用之前在您的号码上使用PhoneNumberUtils.formatNumberToE164() 【参考方案1】:

问题是没有以电话号码作为输入调用该方法。无论数字如何,即前缀为 +91 或 0,它都能正常工作。更正代码如下:

Bundle bundle = intent.getExtras();
String number = bundle.getString(TelephonyManager.EXTRA_INCOMING_NUMBER);
String name=getContactDisplayNameByNumber(number);

【讨论】:

:你好。 numberphone_number?

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

如何使用他/她的号码获取联系人姓名

如何仅使用他们的电话号码获取联系人姓名?

获取发件人的联系人姓名而不是电话号码

android获取联系人图片、姓名和手机号码

从电话联系人中获取姓名、电话号码和电子邮件地址[关闭]

如何从android中的联系人姓名获取联系人的号码