Мне удалось заставить ContactsContact.Directory работать по большей части (http://stackoverflow.com/questions/7436969/contactscontract-directory-how-do-i-return-a-photo) и загружать фотографии для поиска эскизы результатов. Я также могу просмотреть контактную информацию из LOOKUP URI. Но я не могу в контактных данных подтянуть фото пользователя.
Мои данные не находятся в базе данных, но все это из запроса HTTPS REST.
Чтобы обойти изображение, которое не является локальным, я создал второго поставщика контента, который просто принимает URI, анализирует параметр (url) и загружает изображение (если оно еще не кэшировано на SD-карте) путем переопределения openFile (http: // 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 своему поставщику контента. Но на этот раз он, похоже, не работает правильно, так как даже не пытается поразить моего поставщика фотографий.
Затем я решил попробовать и просто локально проанализировать и загрузить данные фотографии и включить данные Byte [] как 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);
}