获取Android联系人图像

时间:2019-01-16 09:54:51

标签: java android

我想获取联系人并将其存储到列表中。我可以在listView中看到我的联系人姓名和电话,但是所有联系人的图像视图都是空的。 如何获取图片?

我有一个带有listView的片段来显示联系人。 这是我的主要片段:

private List<AddressBookContact> getContacts() {
    List<AddressBookContact> list = new LinkedList<>();
    LongSparseArray<AddressBookContact> array = new LongSparseArray<>();
    long start = System.currentTimeMillis();

    String[] projection = {
            ContactsContract.Data.MIMETYPE,
            ContactsContract.Data.CONTACT_ID,
            ContactsContract.Contacts.DISPLAY_NAME,
            ContactsContract.CommonDataKinds.Contactables.DATA,
            ContactsContract.CommonDataKinds.Contactables.TYPE,
    };
    String selection = ContactsContract.Data.MIMETYPE + " in (?, ?)";
    String[] selectionArgs = {
            ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE,
            ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE,
    };
    String sortOrder = ContactsContract.Contacts.SORT_KEY_ALTERNATIVE;

    Uri uri = null;
    if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN_MR2) {
        uri = ContactsContract.CommonDataKinds.Contactables.CONTENT_URI;
    } else {
        uri = ContactsContract.Data.CONTENT_URI;
    }
    // we could also use Uri uri = ContactsContract.Data.CONTENT_URI;

    // ok, let's work...
    Cursor cursor = getContext().getContentResolver().query(uri, projection, selection, selectionArgs, sortOrder);

    final int mimeTypeIdx = cursor.getColumnIndex(ContactsContract.Data.MIMETYPE);
    final int idIdx = cursor.getColumnIndex(ContactsContract.Data.CONTACT_ID);
    final int nameIdx = cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME);
    final int dataIdx = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Contactables.DATA);
    final int typeIdx = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Contactables.TYPE);

    while (cursor.moveToNext()) {
        long id = cursor.getLong(idIdx);
        AddressBookContact addressBookContact = array.get(id);
        if (addressBookContact == null) {
            addressBookContact = new AddressBookContact(
                    id, cursor.getString(nameIdx), getResources(), openPhoto(idIdx));
            array.put(id, addressBookContact);
            list.add(addressBookContact);
        }
        int type = cursor.getInt(typeIdx);
        String data = cursor.getString(dataIdx);
        String mimeType = cursor.getString(mimeTypeIdx);
        if (mimeType.equals(ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE)) {
            // mimeType == ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE
            addressBookContact.addEmail(type, data);
        } else {
            // mimeType == ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE
            addressBookContact.addPhone(type, data);
        }
    }
    cursor.close();

    return list;
}

0 个答案:

没有答案