在我的下面的代码中,我试图通过特定的电话号码获取所有联系人。
然而,看起来我总是得到一些联系人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();
}
答案 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没有这样的声明。