2014-01-28 4 views
11

이 작업을 수행하려는 유일한 사람은 누구입니까? : /? 한마디로 Android 연락처 사진 : 웹에서 사진을 가져 오는 방법 (이전의 로컬 사진 변경을 '취소')


:

들이 (예를 들어 자신의 Google 자신의 계정 페이지에서) 스스로를 정의 않는 한 나는 내 연락처의 사진을 다시 가져올합니다.

사용 사례 : 본인이 직접 연락처 사진을 수정했으며 변경 사항을 취소하고 싶습니다. -> 내 연락처의 Google 사진을 가져오고 싶습니다. (그 사람이 설정 한/그녀 자신).


Google 연락처를 관리하는 앱이 있습니다. 또한

ContactsContract.CommonDataKinds.Photo.PHOTO

를 사용하여 연락처 사진을 관리하고 그것을 잘 일하고있어.

  1. 내가이 Gmail 주소의 입력 내 연락처 목록에 새 연락처를 추가 : 여기

    내가 지원하고자하는 시나리오입니다. (확인)
  2. 잠시 후 연락처 사진이 내 연락처 앱에서 제공됩니다 (연락처에 Google 계정에 사진이 있고 Android 기기에서 연락처 동기화가 사용 설정되어 있기 때문에). 확인을하지 :
  3. 내 응용 프로그램 내에서 (OK)을, 나는 기본적으로 구글의 연락처 사진을 다시 싶어, 내 응용 프로그램 내에서 응용 프로그램의 연락처 사진 (그래서, I '재정의'연락처 사진) (OK)
  4. 을 변경합니다. 어떻게하면 될까요?

사진을 설정하려면 여기를 클릭하십시오. 사진을 '삭제'하고 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(); 
     } 
    } 
+0

이미지 캐싱? –

+0

Nope. 그들은 로컬 안드로이드 DB 및 내 Google 계정 연락처 목록에 저장됩니다. 연락처 (예 : Google 계정 페이지)에 정의 된 연락처 사진을 가져오고 싶습니다. – Pascal

답변

1

Here는 사용자의 Google 프로필 사진을 검색 할 수있는 튜토리얼입니다 : 여기

내가 사진을 업데이트하는 방법입니다. 그것은 또한 계정 이메일, 이름, 같은 다른 것들을 검색합니다 ... 이것은 귀하의 질문에 대한 바로 방법이라고 생각합니다 :)
그것이 hepled 경우 연락을 유지.

+0

감사합니다. 이것은 사용자의 그림을 얻을 수 있습니다.내가 검색하고 싶은 것은 사용자의 연락처 목록 (Google 이메일 주소)에 해당하는 다른 사용자의 Google 사진 목록입니다. – Pascal