提取联系人的照片

时间:2011-06-27 18:19:59

标签: android android-contentprovider

Gah,另一种情况应该是简单的事情证明是非常耗时和痛苦的。

我正在使用它来查询联系人提供者:

private Cursor getContacts(){
Uri uri = ContactsContract.Contacts.CONTENT_URI;
String[] projection = new String[] {
    ContactsContract.Contacts._ID,
    ContactsContract.Contacts.DISPLAY_NAME,
            ContactsContract.Contacts.PHOTO_ID
    };
    ......
    return managedQuery(uri, projection, selection, selectionArgs, sortOrder);
}

这样可以正常工作并检索联系人姓名,在少数几个联系人上它显示PHOTO_ID字段的数字ID,我假设是我正在请求的PHOTO_ID。但后来我将该ID推入此方法以提取位图,它在每次联系时都失败,并且每次流都为空。我正在测试一组包含Android联系人照片的联系人(我知道从Facebook联系人中提取照片有一些问题)。

private Bitmap loadContactPhoto(long id) {
    Uri uri = ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI, id);
    InputStream input = ContactsContract.Contacts.openContactPhotoInputStream(contentResolver, uri);
    if (input == null) return null;
    Bitmap bitmap = BitmapFactory.decodeStream(input);
    return bitmap;
}

我错过了什么?

1 个答案:

答案 0 :(得分:2)

openContactPhotoInputStream()获取联系人的uri,尝试使用ContactsContract.Contacts._ID列而不是PHOTO_ID列调用它,您应该会看到更好的结果。

这里有一些相关的讨论,其中有一些代码需要检查:

How do I load a contact Photo?

请注意,在某些情况下,您会在原生联系人应用中看到一张无法通过内容解析器加载的照片。某些同步信息(例如Facebook)被标记为仅由联系人应用本身使用,并且不会导出到其他应用: - (

但是,使用contactUri应至少处理一些问题。

相关问题