0

문제 : 카메라에서 찍은 사진으로 연락처의 미리보기 이미지를 업데이트 할 수 없습니다. 환경 : 에뮬레이터, api19업데이트 전화 번호부 미리보기 이미지

내 코드 :

String where = ContactsContract.Data.CONTACT_ID + " = ? AND " + ContactsContract.Data.MIMETYPE + " = ?"; 

ArrayList<android.content.ContentProviderOperation> ops = new ArrayList<android.content.ContentProviderOperation>(); 

        String[] photoParams = new String[] { String.valueOf(contact.getPhoneContactId()), 
          ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE }; 

        Bitmap bitmap = MediaStore.Images.Media.getBitmap(contentResolver, Uri.parse(contact.getPhoto())); 
        ByteArrayOutputStream image = new ByteArrayOutputStream(); 
        bitmap.compress(Bitmap.CompressFormat.JPEG , 100, image); 

        ops.add(android.content.ContentProviderOperation 
          .newUpdate(android.provider.ContactsContract.Data.CONTENT_URI).withSelection(where, photoParams) 
          .withValue(ContactsContract.CommonDataKinds.Photo.PHOTO, image.toByteArray()).build()); 

contentResolver.applyBatch(ContactsContract.AUTHORITY, ops); 

연락 썸네일이 작동하는 이유에 어떤 아이디어 감사합니다 기본 연락처 응용 프로그램에서 표시되지 않으며,

ContentResolver cr = getActivity().getContentResolver(); 
     Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null); 

       Uri imageUri = null; 

       if (cur.getString(cur.getColumnIndex(ContactsContract.Contacts.PHOTO_THUMBNAIL_URI)) != null) 
        imageUri = Uri.parse(cur.getString(cur 
          .getColumnIndex(ContactsContract.Contacts.PHOTO_THUMBNAIL_URI))); 
       InputStream is = null; 
       try { 
        if (imageUri != null) 
         is = getActivity().getContentResolver().openInputStream(imageUri); 
       } catch (FileNotFoundException e) { 
        e.printStackTrace(); 
       } 

를 통해 프로그래밍 끌어 둘 (또는 오히려 작동하지 않는다).

답변

1

이 기능을 사용하여 작은 이미지를 얻을 수 있습니다 :

public static byte[] openPhoto(Activity activity, long contactId) { 

    String imageWhere = ContactsContract.Data.CONTACT_ID + " = ? AND " + ContactsContract.Data.MIMETYPE + " = ?"; 
    String[] imageWhereParams = new String[]{Long.toString(contactId), 
      ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE}; 

    ContentResolver cr = activity.getContentResolver(); 
    Cursor imgCur = cr.query(ContactsContract.Data.CONTENT_URI, null, imageWhere, imageWhereParams, null); 
    byte[] image = null; 
    if (imgCur.moveToFirst()) { 
     image = imgCur.getBlob(imgCur.getColumnIndex(ContactsContract.CommonDataKinds.Photo.PHOTO)); 
     imgCur.close(); 
     return image; 
    } 
    imgCur.close(); 

    return null; 
} 

그리고이 과정을 업데이트하기 :

if(contact.isThumbnailInDb()){ 

      if(contact.getThumbnail() != null) { //edit 
       Log.e(TAG, "updating thumbnail"); 
       ops.add(ContentProviderOperation.newUpdate(ContactsContract.Data.CONTENT_URI) 
         .withSelection(ContactsContract.Data.CONTACT_ID + " = ?" + " AND " + ContactsContract.Data.MIMETYPE + " = ?", 
           new String[]{String.valueOf(contact.getContactId()), ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE}) 
         .withValue(ContactsContract.Data.IS_SUPER_PRIMARY, 1) 
         .withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE) 
         .withValue(ContactsContract.CommonDataKinds.Photo.PHOTO, contact.getThumbnail()) 
         .build()); 
      } 
     } else { 

      if(contact.getThumbnail() != null){ 
       Log.e(TAG, "inserting thumbnail"); 
       ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI) 
         .withValue(ContactsContract.Data.RAW_CONTACT_ID, contact.getContactId()) 
         .withValue(ContactsContract.Data.IS_SUPER_PRIMARY, 1) 
         .withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE) 
         .withValue(ContactsContract.CommonDataKinds.Photo.PHOTO, contact.getThumbnail()) 
         .build()); 
       contact.setThumbnailInDb(true); 
      } 
     }