이 작업을 수행하려는 유일한 사람은 누구입니까? : /? 한마디로 Android 연락처 사진 : 웹에서 사진을 가져 오는 방법 (이전의 로컬 사진 변경을 '취소')
:
들이 (예를 들어 자신의 Google 자신의 계정 페이지에서) 스스로를 정의 않는 한 나는 내 연락처의 사진을 다시 가져올합니다.
사용 사례 : 본인이 직접 연락처 사진을 수정했으며 변경 사항을 취소하고 싶습니다. -> 내 연락처의 Google 사진을 가져오고 싶습니다. (그 사람이 설정 한/그녀 자신).
Google 연락처를 관리하는 앱이 있습니다. 또한
ContactsContract.CommonDataKinds.Photo.PHOTO
를 사용하여 연락처 사진을 관리하고 그것을 잘 일하고있어.
- 내가이 Gmail 주소의 입력 내 연락처 목록에 새 연락처를 추가 : 여기 내가 지원하고자하는 시나리오입니다. (확인)
- 잠시 후 연락처 사진이 내 연락처 앱에서 제공됩니다 (연락처에 Google 계정에 사진이 있고 Android 기기에서 연락처 동기화가 사용 설정되어 있기 때문에). 확인을하지 :
- 내 응용 프로그램 내에서 (OK)을, 나는 기본적으로 구글의 연락처 사진을 다시 싶어, 내 응용 프로그램 내에서 응용 프로그램의 연락처 사진 (그래서, I '재정의'연락처 사진) (OK)
- 을 변경합니다. 어떻게하면 될까요?
사진을 설정하려면 여기를 클릭하십시오. 사진을 '삭제'하고 ContactProvider를 사용하여 Google 계정에서 다시 사용자 사진을 다운로드해야합니까?
어떻게 사진을 삭제할 수 있습니까? ContactsContract.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();
}
}
이미지 캐싱? –
Nope. 그들은 로컬 안드로이드 DB 및 내 Google 계정 연락처 목록에 저장됩니다. 연락처 (예 : Google 계정 페이지)에 정의 된 연락처 사진을 가져오고 싶습니다. – Pascal