Cursor mCursor = getContentResolver().query(Data.CONTENT_URI,
new String[] {ContactsContract.Contacts.DISPLAY_NAME,
ContactsContract.CommonDataKinds.Phone.NUMBER,
ContactsContract.Contacts._ID}, // projection
null, // selection
null, // selectionArgs
ContactsContract.Contacts.DISPLAY_NAME); // sortOrder
这是我的查询方法。我不知道为什么它会返回重复的名字(根据Mboile号码,电话号码,工作,家庭等)。如果在联系人列表中有一个人“Person1”有三个联系号码,那么我将获得三行“Person1”,其中包含3个不同的号码。
答案 0 :(得分:0)
首先尝试查找联系人_id,然后通过_id在Phone中查询。
即:
mQuerier.startQuery(QUERY_ALL, null, ContactsContract.Contacts.CONTENT_URI,
CONTACT_PROJECTION, null, null, null);
...
private void startQueryPhones(Item item) {
Log.d("Start async query phones:" + item.displayName);
mQuerier.startQuery(QUERY_PHONES, item,
ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + "=?",
new String[] { String.valueOf(item.id)}, null);
}
您将获得一个电话号码列表()。在这里我使用AysncQueryHandler进行查询,但是可以用一个例子来说明。重要的是正确的URI和正确的查询步骤。