检索联系人的所有 phone 个号码

Retrive all phone numbers of a contact

我已经看到其他类似的问题并且 none 有效。 使用下面的代码,我能够获得联系人的 default phone 号码,但不是全部。

Cursor contact = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = " + contactId, null, null);
contact.moveToFirst();

phoneNumberList.add(contact.getString(contact.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)));

然后我尝试创建多个游标,其中包含有关 phone 类型的更多详细信息,然后将它们添加到列表中:

Cursor contact = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, new String[]{ContactsContract.CommonDataKinds.Phone.NUMBER}, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ? AND " + ContactsContract.CommonDataKinds.Phone.TYPE + " = " + ContactsContract.CommonDataKinds.Phone.TYPE_HOME, new String[]{contactID}, null);

但不幸的是,它并没有解决任何问题。如果有人帮助我解决这个问题,将不胜感激。

我假设您想获得所有 phone 个号码及其类型(家庭、移动、主要等)。

这是如何做到的(phones 的列表将被打印到 log=:

String projection = new String[] { Phone.NUMBER, Phone.TYPE, Phone.LABEL };
String selection = Phone.CONTACT_ID + "=" + contactId;
Cursor cur = getContentResolver().query(Phone.CONTENT_URI, projection, selection, null, null); 
while (cur != null && cur.moveToNext()) {
    String number = cur.getString(0);
    int type = cur.getInt(1);        // home / office / personal
    String label = cur.getString(2); // a custom label in case type is "TYPE_CUSTOM"
    String labelStr = Phone.getTypeLabel(getResources(), type, label);

    Log.d(TAG, "got a phone: " + number + " (" + labelStr + ")");
}
if (cur != null) {
    cur.close();
}

调试版本

String projection = new String[] { Phone._ID, Phone.CONTACT_ID, Phone.NUMBER, Phone.TYPE, Phone.LABEL };
String selection = Phone.CONTACT_ID + "=" + contactId;
Cursor cur = getContentResolver().query(Phone.CONTENT_URI, projection, selection, null, null); 
if (cur != null) {
    DatabaseUtils.dumpCursor(cur);
    cur.close();
}