Я единственный, кто пытается достичь этого ...: /?Контактное фото для Android: Как вернуть картинку из Интернета (и так, «отменить» прежнее изменение изображения на локальном компьютере)
Короче:
Я хочу, чтобы забрать обратно картину моих контактов, как они определили его сами по себе (на своей собственной странице учетной записи Google, например).
использование: Я изменил одну из картины моего контакта себя, и теперь, я хочу, чтобы отменить это изменение -> Я хочу, чтобы «загрузить назад» изображение Google моего контакта (тот, установленный им/сама).
У меня есть приложение, которое управляет контактами Google. Она также управлять контактной фотографии с помощью
ContactsContract.CommonDataKinds.Photo.PHOTO
И это работает прекрасно.
Вот сценарий, я хотел бы поддержать:
- добавить новый контакт в моем списке контактов ввода его адреса Gmail. (OK)
- Через некоторое время контактная фотография доступна в моем приложении-контакте (поскольку контакт имеет изображение в его учетной записи Google, а контактная синхронизация включена на устройстве Android). (OK)
- В моем приложении, изменить приложение изображение контакта (так, я ставиться контакт изображения) (OK)
- В моем приложении, я хочу вернуться по умолчанию 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();
}
}
R U кеширование изображений? –
Нет. Они хранятся в локальной базе данных Android и в моем списке контактов учетной записи Google. Я хочу вернуть изображение контакта, как указано в контакте с ним (например, на его странице учетной записи Google). – Pascal