【问题标题】:Extract a contact's photo提取联系人的照片
【发布时间】:2011-09-23 17:46:10
【问题描述】:

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

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

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;
}

我错过了什么?

【问题讨论】:

    标签: android android-contentprovider


    【解决方案1】:

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

    这里有很多相关的讨论,还有一些代码可以查看:

    How do I load a contact Photo?

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

    但是,使用 contactUri 至少应该可以解决您的一些问题。

    【讨论】:

    • 谢谢!你救了我的一天!但是有没有人知道如何从例如脸书同步了吗? - 我知道它的高度讨论
    猜你喜欢
    • 2014-01-14
    • 1970-01-01
    • 2011-08-24
    • 2012-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-27
    相关资源
    最近更新 更多