ContactsContract 按联系人 ID 查找电话号码

Posted

技术标签:

【中文标题】ContactsContract 按联系人 ID 查找电话号码【英文标题】:ContactsContract lookup Phone Number by Contact Id 【发布时间】:2011-06-11 09:38:38 【问题描述】:

我正在尝试通过联系人 ID 查找联系人的电话号码,结果正在返回 - 电话号码:1

我尝试过使用 SO 周围的其他示例,但光标上的计数一直为 0

Uri uri = ContentUris.withAppendedId(Data.CONTENT_URI, contactId);

Log.i(TAG, "Locate Contact by Id: " + contactId + " at Uri: " + uri.toString());

Cursor cursor = this.getContentResolver().query(uri, null, null, null, null);

try 
    if (cursor.moveToFirst()) 
        Log.i(TAG, "Phone Number: " + cursor.getString(cursor.getColumnIndex(Phone.NUMBER)));
    
 finally 
    cursor.close();

【问题讨论】:

【参考方案1】:

试试这个:

private ArrayList<String> getPhoneNumbers(String id) 

    ArrayList<String> phones = new ArrayList<String>();

    Cursor cursor = mContentResolver.query(
            CommonDataKinds.Phone.CONTENT_URI, 
            null, 
            CommonDataKinds.Phone.CONTACT_ID +" = ?", 
            new String[]id, null);

    while (cursor.moveToNext()) 
    
        phones.add(cursor.getString(cursor.getColumnIndex(CommonDataKinds.Phone.NUMBER)));
     

    cursor.close();
    return(phones);

【讨论】:

【参考方案2】:

我最终是通过Phone.LOOKUP_KEY 而不是Phone.CONTACT_ID 完成的;

private HashMap<String, CharSequence> lookupPhoneNumbers(String lookupKey)

    HashMap<String, CharSequence> numbers = new HashMap<String, CharSequence>();

    Cursor cursor = getContext().getContentResolver().query(Phone.CONTENT_URI, null, Phone.LOOKUP_KEY + " = ?", new String[]  lookupKey , null);
    try
    
        while (cursor.moveToNext())
        
            String phoneNumber = cursor.getString(cursor.getColumnIndex(Phone.NUMBER));
            int type = cursor.getInt(cursor.getColumnIndex(Phone.TYPE));
            CharSequence phoneLabel = Phone.getTypeLabel(getResources(), type, "Undefined");
            // boolean isPrimary = (cursor.getInt(cursor.getColumnIndex(Phone.IS_PRIMARY)) == 1);

            numbers.put(phoneNumber, phoneLabel);
        
     finally
    
        cursor.close();
    

    return numbers;

【讨论】:

您使用的查找键是什么?

以上是关于ContactsContract 按联系人 ID 查找电话号码的主要内容,如果未能解决你的问题,请参考以下文章

为啥 PhoneLookup 和 ContactsContract.Contacts 选择器之间的联系人 ID 不匹配?

ContactsContract 按电话号码选择记录

在 ContactsContract 中更新照片的功能

Android:联系人列表不按名称排序

ContactsContract.CommonDataKinds.Phone.NUMBER不能如期工作。

使用 Android 上的 ContactsContract api 从联系人获取邮政地址