2011-03-09 6 views
2

안녕하세요 android가 새로 왔습니다. 내 요구 사항은 연락처 사진을 선택한 연락처로 업데이트하는 것입니다. 다음 I이ContentResolver.Update()로 안드로이드 연락처 사진 업데이트 중 문제가 발생했습니다.

byte[] imageBytes = imgContactPhoto.getDrawable().toString().getBytes(); 

     ContentValues values = new ContentValues(); 
    values.put(ContactsContract.Data.RAW_CONTACT_ID, contactId); 
    values.put(ContactsContract.Data.IS_SUPER_PRIMARY, 1); 
    values.put(ContactsContract.CommonDataKinds.Photo.PHOTO, imageBytes); 
    values.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE); 

    Uri uri = ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI, Long.parseLong(contactId)); 
    cr.update(uri, values, ContactsContract.Contacts._ID + " = " + contactId, null); 

imgContactPhoto을 구현할 쓰고 코드는 이미지 뷰의 첫 번째 행에, I는 (접촉 = cotact ID)와 그 위에 설정된 화상의 바이트 배열을 추출하고, 상기 접촉을 업데이트하고,이다. 코드를 디버깅 할 때 위의 모든 명령문을 아무런 예외없이 원활하게 전달하지만 연락처 사진은 업데이트되지 않습니다. 새로운 시계에서 디버그하는 동안 uri 값과 값을 확인하면 "uri"  uri가 될 수 없습니다 변수로 해결
"값"  값을 변수로 해결할 수 없습니다.

어떤 도움을 주셔서 감사합니다.

+0

수정 (공동 id = contactID (정수 값)) –

+0

안녕하세요. 연락처 사진 설정에 대한 자습서를 찾았습니다. 그냥 링크를 따르십시오 : http://thinkandroid.wordpress.com/2009/12/30/handling-contact-photos-all-api-levels/ –

답변

3

짧은 암호로 Contacts.CONTENT_URI를 (를) 업데이트하려고하는데 사진이 Data.CONTENT_URI에 저장됩니다.

연락처의 기본 사진 만 업데이트해야합니까? 그렇다면 그것은 상당히 솔직합니다. 데이터 항목의 ID를 얻으려면 Contacts에서 PHOTO_ID를 사용하십시오. 자동으로 IS_SUPER_PRIMARY가 1 인 Photo를 참조합니다.이 ID를 얻으면 RAW_CONTACT_ID를 ContentValues에 추가하지 말고 update 문을 다음과 같이 변경하십시오.

Uri dataUri = ContentUris.withAppendedId(Data.CONTENT_URI, dataId); 
cr.update(dataUri , values, null, null); 

사진이없는 연락처에서 사진을 설정하는 경우 사진이 조금 더 까다 롭습니다. ContactsContract.Data 항목을 삽입해야하므로 올바른 ContactsContract.RawContact를 계산하여 데이터 항목도 첨부해야합니다. 그 중 하나가 있다면 그것은 간단하지만, 사용자가 몇 가지 동기화 소스를 가지고 있다면 연락처에 대해 여러 RawContacts가있을 수 있습니다. 어떤 경우에 어떤 것을 첨부할지 결정해야합니다.

관련 문제