Вставить новую фотографию для контакта с андроидом

У меня проблема, когда я хочу вставить фотографию для контакта. Я хочу вставить «родительский» контактный образ, у которого нет изображения.

Я просто хочу изменить фотографию контакта, а не сырой контакт (contact_id)

Он просто работает для обновления, но не для вставки, что не так? Фотография не записывается в контент-провайдерах.

//UPDATE if (contact.getPhotoURL() != null){ ops.add(ContentProviderOperation .newUpdate(Data.CONTENT_URI) .withSelection(ContactsContract.Data.CONTACT_ID + "=?" + " AND " + ContactsContract.Data.MIMETYPE + "=?", new String[] { String.valueOf(contact.getId()), ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE }) .withValue(ContactsContract.CommonDataKinds.Photo.PHOTO, baos.toByteArray()) .build()); }else{ //INSERT ops.add(ContentProviderOperation .newInsert(Data.CONTENT_URI) .withValue(ContactsContract.Data.CONTACT_ID, contact.getId()) .withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE) .withValue(ContactsContract.CommonDataKinds.Photo.PHOTO, baos.toByteArray()) .build()); } 

благодаря

EDIT: этот следующий код работает

  ByteArrayOutputStream baos = new ByteArrayOutputStream(); bmp.compress(Bitmap.CompressFormat.PNG, 100, baos); ContentResolver c = ctx.getContentResolver(); ContentValues values = new ContentValues(); int photoRow = -1; String where = ContactsContract.Data.RAW_CONTACT_ID + " = " + personId + " AND " + ContactsContract.Data.MIMETYPE + "=='" + ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE + "'"; Cursor cursor = c.query(ContactsContract.Data.CONTENT_URI, null, where, null, null); int idIdx = cursor.getColumnIndexOrThrow(ContactsContract.Data._ID); if (cursor.moveToFirst()) { photoRow = cursor.getInt(idIdx); } cursor.close(); values.put(ContactsContract.Data.RAW_CONTACT_ID, personId); values.put(ContactsContract.Data.IS_SUPER_PRIMARY, 1); values.put(ContactsContract.CommonDataKinds.Photo.PHOTO, baos.toByteArray()); values.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE); if (photoRow >= 0) { c.update(ContactsContract.Data.CONTENT_URI, values, ContactsContract.Data._ID + " = " + photoRow, null); } else { c.insert(ContactsContract.Data.CONTENT_URI, values); } 

Поле IS_SUPER_PRIMARY исправляет проблему, фотография сохраняется для «глобального» контакта, а не только определенного raw_contact.

С уважением.