Honeycomb ContactsContract.Directory - 在用户详细信息中显示照片

时间:2011-09-16 19:51:43

标签: android directory contacts android-3.0-honeycomb photo

我设法让ContactsContact.Directory大部分工作(http://stackoverflow.com/questions/7436969/contactscontract-directory-how-do-i-return-a-photo),并加载照片搜索结果缩略图。我还可以从LOOKUP URI查看联系人详细信息。但我无法在联系方式中提取用户照片。

我的数据不在数据库中,而是全部来自HTTPS REST查询。

为了解决不是本地的图像,我创建了第二个内容提供程序,它只需要一个URI,解析一个参数(url)并通过覆盖openFile(http)来下载一个图像(如果尚未在sdcard上缓存) ://stackoverflow.com/questions/3883211/how-to-store-large-blobs-in-an-android-content-provider)。当我将uri作为PHOTO_THUMBNAIL_URI

传递回来时

效果很好,可以在联系人的结果部分快速显示图像。我现在的问题是我无法在联系人详细信息屏幕中加载照片。

我知道它正在向我的目录提供程序进行LOOKUP的第二次查询,我正在解析所有字段,虽然它只要求PHOTO_URI而不是PHOTO_THUMBNAIL_URI,这并不是什么大问题,因为我将相同的URI传递给我的内容提供者..但这次似乎没有正常工作,因为它甚至没有尝试打我的照片提供商。

然后我决定尝试在本地解析&下载照片数据并在查找响应中包含字节[]数据作为PHOTO(Data15),但这也不起作用。

此时将非常感谢任何帮助。

    static void addPhotoRow(MatrixCursor cursor, UdsProjection udsProjection, long contactId,
            String lookupKey, String accountName, String displayName, String photoUri) {
        UdsContactRow r = new UdsContactRow(
                udsProjection, contactId, lookupKey, accountName, displayName);
        r.put(Data.MIMETYPE, ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE);
        r.put(Photo.PHOTO_ID, photoUri);
        //r.put(Photo.PHOTO, getPhotoBytes(photoUri));
        cursor.addRow(r.getRow());
        Log.e("TAG","Adding photo row " + photoUri);
    }

1 个答案:

答案 0 :(得分:0)

所以我可以对结果有所了解。显然,您将项目添加到返回光标的顺序非常重要。我将光标中的Photo mime类型行移动到任何细节(例如电话号码)之前,然后开始工作..希望这可以帮助其他人在一个下午拉出他们的头发。