PhoneLookup.CONTENT_FILTER_URI返回两次相同的联系人

时间:2014-02-23 11:41:39

标签: android contacts android-contacts

在我的下面的代码中,我试图通过特定的电话号码获取所有联系人。

然而,看起来我总是得到一些联系人ID多一次。 特别是我有2个联系人使用相同的电话号码,我得到3个联系人ID。其中一个两次(相同的ID)

任何想法?

感谢

Cursor contactLookupCursor =  
localContentResolver.query(
    Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI, Uri.encode(requestedPhone)), 
                    new String[] {PhoneLookup._ID}, 
                    null, 
                    null, 
                    null);

if (contactLookupCursor != null)
{
    System.out.println("contactLookupCursor.getCount = "+contactLookupCursor.getCount()); // here i get 3
    if(contactLookupCursor.moveToFirst())
    {
        do
        {
            int ColumnIndex = contactLookupCursor.getColumnIndex(PhoneLookup._ID);
            if(ColumnIndex >= 0)
            {
                String contactId = contactLookupCursor.getString(ColumnIndex);
                System.out.println("contactId="+contactId);// here i get 12 then 13 then 13 again
            }
        }
        while (contactLookupCursor.moveToNext());
    }
    contactLookupCursor.close();
}

1 个答案:

答案 0 :(得分:3)

如果您为PhoneLookup.CONTENT_FILTER_URI提供非规范化电话号码,那么数据记录表中的将在两个位置匹配的电话号码。

1 match for number with column "number" in record.
1 match for normalized_number with column "normalized_number" in record.

如果,您提供number = "+49177123456",然后 number == normalized_number

本案中,PhoneLookup.CONTENT_FILTER_URI将仅在电话桌的“normalized_number”栏中搜索

您也可以使用 CommonDataKinds.Phone 代替PhoneLookup。

这样,无论所提供的电话号码是否已标准化,您都无法获得重复结果:

String number = "0177123456";
Uri uri =     Uri.withAppendedPath(android.provider.ContactsContract.CommonDataKinds.Phone.CONTENT_FILTER_URI,Uri.encode(number));
Cursor rcursor = getContentResolver().query(uri,
                                        new String[] { ContactsContract.CommonDataKinds.Phone.CONTACT_ID },
                                        null,null,null);

我猜PhoneLookup的奇怪行为是一个错误。

也许PhoneLookup比CommonDataKinds.Phone更具性能

  

课程概述:[...]此查询经过高度优化。 http://developer.android.com/reference/android/provider/ContactsContract.PhoneLookup.html

CommonDataKinds.Phone没有这样的声明。