2014-01-28 2 views
11

Я единственный, кто пытается достичь этого ...: /?Контактное фото для Android: Как вернуть картинку из Интернета (и так, «отменить» прежнее изменение изображения на локальном компьютере)


Короче:

Я хочу, чтобы забрать обратно картину моих контактов, как они определили его сами по себе (на своей собственной странице учетной записи Google, например).

использование: Я изменил одну из картины моего контакта себя, и теперь, я хочу, чтобы отменить это изменение -> Я хочу, чтобы «загрузить назад» изображение Google моего контакта (тот, установленный им/сама).


У меня есть приложение, которое управляет контактами Google. Она также управлять контактной фотографии с помощью

ContactsContract.CommonDataKinds.Photo.PHOTO

И это работает прекрасно.

Вот сценарий, я хотел бы поддержать:

  1. добавить новый контакт в моем списке контактов ввода его адреса Gmail. (OK)
  2. Через некоторое время контактная фотография доступна в моем приложении-контакте (поскольку контакт имеет изображение в его учетной записи Google, а контактная синхронизация включена на устройстве Android). (OK)
  3. В моем приложении, изменить приложение изображение контакта (так, я ставиться контакт изображения) (OK)
  4. В моем приложении, я хочу вернуться по умолчанию Google изображения контакта: Не OK. Как я могу это достичь?

Пожалуйста, взгляните на мой код здесь, чтобы установить фотографию. Должен ли я просто «очистить» фотографию и полагаться на ContactProvider, чтобы загрузить фотографию пользователя из учетной записи Google?

Как очистить фотографию. Установить КонтактыContract.CommonDataKinds.Photo.PHOTO на 'null'? и удалить связанный файл, то есть

Uri rawContactPhotoUri = Uri.withAppendedPath(ContentUris.withAppendedId(RawContacts.CONTENT_URI, rawContactId), RawContacts.DisplayPhoto.CONTENT_DIRECTORY) 

Спасибо за помощь.

Вот как я обновить изображение:

private void updatePhotoThumbnail(Bitmap bitmap, Contact contact) throws Exception 
    { 
     byte[] contactPhotoBytes = getContactPhotoBytes(bitmap); 

     ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>(); 

     // @formatter:off 
     String where =  ContactsContract.RawContacts.ACCOUNT_NAME + "= ? " 
       + "AND " + ContactsContract.RawContacts.ACCOUNT_TYPE + "= ? " 
       + "AND " + ContactsContract.Data.CONTACT_ID + "= ? " 
       + "AND " + ContactsContract.Data.RAW_CONTACT_ID + "= ? " 
       + "AND " + ContactsContract.Data.MIMETYPE + " = ?"; 
     // @formatter:on 

     String[] params = new String[] 
     { 
       // @formatter:off 
       _accountName, 
       AccountManagerHelper.GOOGLE_ACCOUNT_TYPE, 
       String.valueOf(contact.getId()), 
       String.valueOf(contact.getRawContactId()), 
       ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE 
       // @formatter:on 
     }; 

     ops.add(ContentProviderOperation.newUpdate(ContactsContract.Data.CONTENT_URI).withSelection(where, params) 
       .withValue(ContactsContract.Data.IS_SUPER_PRIMARY, 1) 
       .withValue(ContactsContract.CommonDataKinds.Photo.PHOTO, contactPhotoBytes).build()); 

     try 
     { 
      _contentResolver.applyBatch(ContactsContract.AUTHORITY, ops); 
      updateDisplayPhoto(contact.getRawContactId(), contactPhotoBytes); 
     } 
     catch (RemoteException e) 
     { 
      e.printStackTrace(); 
      throw new Exception(e.getMessage()); 
     } 
     catch (OperationApplicationException e) 
     { 
      e.printStackTrace(); 
      throw new Exception(e.getMessage()); 
     } 
    } 


    private void updateDisplayPhoto(long rawContactId, byte[] photo) 
    { 
     Uri rawContactPhotoUri = Uri.withAppendedPath(ContentUris.withAppendedId(RawContacts.CONTENT_URI, rawContactId), 
       RawContacts.DisplayPhoto.CONTENT_DIRECTORY); 
     try 
     { 
      AssetFileDescriptor fd = getContentResolver().openAssetFileDescriptor(rawContactPhotoUri, "rw"); 
      OutputStream os = fd.createOutputStream(); 
      os.write(photo); 
      os.close(); 
      fd.close(); 
     } 
     catch (IOException e) 
     { 
      e.printStackTrace(); 
     } 
    } 
+0

R U кеширование изображений? –

+0

Нет. Они хранятся в локальной базе данных Android и в моем списке контактов учетной записи Google. Я хочу вернуть изображение контакта, как указано в контакте с ним (например, на его странице учетной записи Google). – Pascal

ответ

1

Here является учебник, чтобы получить профиль пользователя Google изображение. Он также извлекает некоторые другие вещи, такие как адрес электронной почты, имя, ... Я думаю, что это прямой способ для вашего вопроса :)
Оставайтесь в контакте, если он сочтет.

+0

Спасибо за ссылку. Это позволяет получить изображение пользователя.То, что я хотел бы получить, - это список изображений Google других пользователей, соответствующих списку контактов пользователя (адреса электронной почты Google) – Pascal