Bitmap bmp = BitmapFactory.decodeFile("/sdcard/abc.jpg");
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bmp.compress(Bitmap.CompressFormat.JPEG, 75, stream); ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
int photoId = -1;
Cursor cursor = c.query(Phone.CONTENT_URI, null, Phone.CONTACT_ID
+ " = " + id, null, null);
int idIdx = cursor.getColumnIndexOrThrow(Photo.PHOTO_ID);
System.out.println("cursor counts------------------"
+ cursor.getCount());
System.out.println(Photo.PHOTO.equals(Photo.DATA15));
if (cursor.moveToFirst())
{
photoId = cursor.getInt(idIdx);
System.out.print("photo id-------------" + photoId);
}
cursor.close();
if (photoId > 0)
{
System.out.println("do update");
ops.add(ContentProviderOperation.newUpdate(Data.CONTENT_URI)
.withSelection(Data._ID + "=?", new String[]
{ String.valueOf(photoId) })
.withValue(Data.RAW_CONTACT_ID, id)
.withValue(Data.MIMETYPE, Photo.CONTENT_ITEM_TYPE)
.withValue(Photo.PHOTO, bytes).build());
}
else
{
System.out.println("do insert");
ops.add(ContentProviderOperation.newInsert(Data.CONTENT_URI)
.withValue(Data.RAW_CONTACT_ID, id)
.withValue(Data.MIMETYPE, Photo.CONTENT_ITEM_TYPE)
.withValue(Photo.PHOTO, bytes).build());
}
c.applyBatch(ContactsContract.AUTHORITY, ops);
Я использовал приведенные выше коды для вставки или обновления изображения контакта, однако, когда я прикрепил изображение к контакту, изображение можно увидеть только в списке контактов. Если перейти к операции с контактной информацией, я не смогу см. изображение. И иногда изображение будет прикреплено к другому контакту вместо указанного контакта (указывается по id). Любая помощь приветствуется! :))