2012-12-05 2 views
0

두 연락처의 프로필 사진을 서로 바꿔야합니다 bytestreams을 작성하지 않고! contentResolver를 사용하여 PHOTO_FILE_ID, PHOTO_ID, PHOTO_THUMBNAIL_URI 및 PHOTO_URI를 업데이트 할 수 있는지 궁금합니다. 심지어 가능할까요? 이것은 내가 정보를 알아볼 방법입니다 :스왑 contentResolver 업데이트를 통해 두 연락처의 사진

이 내가 노력 코드 (runable하지, 난 그냥 전체 코드의 일부를 복사)입니다

String[] projection = new String[]{ ContactsContract.Data._ID, 
     ContactsContract.CommonDataKinds.StructuredName.PHOTO_FILE_ID, 
     ContactsContract.CommonDataKinds.StructuredName.PHOTO_ID, 
     ContactsContract.CommonDataKinds.StructuredName.PHOTO_THUMBNAIL_URI, 
     ContactsContract.CommonDataKinds.StructuredName.PHOTO_URI}; 

Cursor cursor = this.contentResolver.query(ContactsContract.Data.CONTENT_URI, projection, ContactsContract.Data.MIMETYPE + " LIKE ?", 
      new String[] { ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE }, null); 

if(cursor.moveToFirst()){ 
    long ID = cursor.getLong(cursor.getColumnIndex(
      ContactsContract.Data._ID)); 
    Integer photoFileID = cursor.getInt(cursor.getColumnIndex(
      ContactsContract.CommonDataKinds.StructuredName.PHOTO_FILE_ID)); 
    Integer photoID = cursor.getInt(cursor.getColumnIndex(
      ContactsContract.CommonDataKinds.StructuredName.PHOTO_ID)); 
    String photoThumbnailURI = cursor.getString(cursor.getColumnIndex(
      ContactsContract.CommonDataKinds.StructuredName.PHOTO_THUMBNAIL_URI)); 
    String photoURI = cursor.getString(cursor.getColumnIndex(
      ContactsContract.CommonDataKinds.StructuredName.PHOTO_URI)); 
} 
cursor.close(); 

을 그리고 이것은 내가 쓰기 시도하는 방법이다 다른 연락처 정보는 :

ContentValues contentValues = new ContentValues(); 
contentValues.put(ContactsContract.CommonDataKinds.StructuredName.PHOTO_FILE_ID, photoFileID); 
contentValues.put(ContactsContract.CommonDataKinds.StructuredName.PHOTO_ID, photoID); 
contentValues.put(ContactsContract.CommonDataKinds.StructuredName.PHOTO_THUMBNAIL_URI, photoThumbnailURI); 
contentValues.put(ContactsContract.CommonDataKinds.StructuredName.PHOTO_URI, photoURI); 

String where = ContactsContract.Data._ID + " = ? AND " + ContactsContract.Data.MIMETYPE + " LIKE ?"; 
String[] params = new String[] { String.valueOf(ID), 
           ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE }; 

this.contentResolver.update(ContactsContract.Data.CONTENT_URI, contentValues, where, params); 

내가이 스크립트를 실행하면 디버거는 열이 유효하지 않은 것을 알려줍니다 ... 다른 방법으로 사진 정보를 업데이트하는 방법 어떤 아이디어?

+0

여기에도 디버거 출력을 붙여 넣습니다. 다른 사람들이 문제를 이해하는 데 도움이됩니다. – noob

답변

0

예, 이것은 연락처 데이터베이스의 혼란스러운 부분입니다. 은 "사진"열 이름이 ContactsContract.CommonDataKinds.StructuredName 상속 비록

는, 그 는 StructuredNames 행에 대해 인식되지 않습니다.

바꾸려는 ContactsContract.Contacts 열로 게시물을 업데이트하려면 사진을 교환하는 것이 좋습니다.

관련 문제