Android 연락처 이미지 업데이트 실패 문제
5160 단어 Android 확장
현상: 연락처 이미지 필드에 이미지 데이터를 저장하면 정상적으로 업데이트할 수 있고 현재 수정된 연락처 이미지가 존재하지 않으면 업데이트에 실패할 수 있습니다.
원인: 연락처에 이미 연락처 이미지가 존재할 때 연락처 이미지를 저장하는 이진 필드가 자리를 차지한다. 즉, 데이터베이스에 이미 이 기록이 존재한다는 것을 의미한다.
getContent Resolver()를 호출하기만 하면 됩니다.업데이트 () 방법으로 이미지를 업데이트합니다. 연락처 이미지가 존재하지 않으면 사용자가 이미지를 추가하려면 호출해야 합니다
getContentResolver().insert ;
:
String phoneWhere = ContactsContract.CommonDataKinds.Phone.CONTACT_ID + "=" + contactId;
Cursor phoneCursor = mView.getCtx().getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, phoneWhere , null, null);
if(phoneCursor.moveToNext()){
Long photoId = phoneCursor.getLong(phoneCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.PHOTO_ID));
if(bm != null){
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bm.compress(Bitmap.CompressFormat.PNG, 100, baos);
byte[] data = baos.toByteArray();
//
if(photoId > 0){
values.clear();
values.put(ContactsContract.CommonDataKinds.Photo.PHOTO, data);
// values.put(ContactsContract.Contacts.Data.MIMETYPE, ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE);
String wherebm =
ContactsContract.Data.RAW_CONTACT_ID + "=? AND " + ContactsContract.Data.MIMETYPE + "=? ";
//rawContactsId -> contactId
String[] selectionArgsbm = new String[]{rawContactsId, ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE};
int id = mView.getCtx().getContentResolver().update(ContactsContract.Data.CONTENT_URI, values, wherebm,
selectionArgsbm);
}else{
//
//
values.clear();
values.put(ContactsContract.Contacts.Data.RAW_CONTACT_ID, rawContactsId);
values.put(ContactsContract.CommonDataKinds.Photo.PHOTO, data);
values.put(ContactsContract.Contacts.Data.MIMETYPE, ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE);
mView.getCtx().getContentResolver().insert(ContactsContract.Data.CONTENT_URI, values);
}
}
}