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