2015-03-03 1 views
0

Я ищу способ программно обновить фотографию контакта с данным растровым изображением. Я делаю следующее, но ничего не происходит. Также не устанавливается изображение и не возникает ошибка.Android set contact фото с ContactsContract

Cursor cursor = provider.query(ContactsContract.RawContacts.CONTENT_URI, 
       new String[]{ContactsContract.RawContacts.CONTACT_ID, ContactsContract.RawContacts.ACCOUNT_TYPE}, 
       ContactsContract.RawContacts.ACCOUNT_TYPE +"=?", 
       new String[]{accountType}, 
       null); 

     // Only one entry 
     if(cursor.moveToFirst()) 
     { 
      id = cursor.getString(cursor.getColumnIndex(ContactsContract.RawContacts.CONTACT_ID)); 
     } 

     ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
     bmp.compress(CompressFormat.JPEG, 100, stream); 
     byte[] bytes = stream.toByteArray(); 

     ops.add(ContentProviderOperation.newUpdate(Data.CONTENT_URI) 
       .withValueBackReference(Data.RAW_CONTACT_ID, Integer.parseInt(id)) 
       .withValue(Data.MIMETYPE, Photo.CONTENT_ITEM_TYPE) 
       .withValue(Photo.PHOTO, bytes) 
       .build()); 
    } 
    provider.applyBatch(ops); 

Изображение загружаются из REST API, то, что, кажется, работает правильно, так как байты объекта на самом деле имеет размер загруженного изображения.

ответ

0

Ваш код соединяет строку данных фотографий с определенным сырым контактом, но не инициирует никаких процедур, которые изменят отображаемую фотографию для этого необработанного контакта и соответствующего контакта.

Используйте ContactsContract.RawContacts.DisplayPhoto для принудительного контакта с дисплеем для редактирования фотографий. В документах есть хороший пример использования.