Код внизу показывает, как я обновляю изображения контактов из своего приложения. Это хорошо работает, если пользователь использует SIM-карту, телефон, контакты Google и тому подобное. Но если он использует приложение Outlook, приложение Outlook снова перезаписывает изображения, установленные моим приложением, через некоторое время.
Могу ли я как-то это решить? Могу ли я принудительно перезаписать изображение Outlook, чтобы Outlook синхронизировал мою новую фотографию вместо старой?
Код
byte[] photo = ImageUtil.convertImageToByteArray(bitmap, true);
ContentValues values = new ContentValues();
int photoId = -1;
String where = ContactsContract.Data.RAW_CONTACT_ID + " == " +
contact.getRawId() + " AND " + ContactsContract.Contacts.Data.MIMETYPE + "=='" +
ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE + "'";
Cursor cursor = MainApp.get().getContentResolver().query(
ContactsContract.Data.CONTENT_URI,
null,
where,
null,
null);
int idIdx = cursor.getColumnIndexOrThrow(ContactsContract.Data._ID);
if (cursor.moveToFirst()) {
photoId = cursor.getInt(idIdx);
}
cursor.close();
values.put(ContactsContract.Data.RAW_CONTACT_ID, contact.getRawId());
values.put(ContactsContract.Data.IS_SUPER_PRIMARY, 1);
values.put(ContactsContract.CommonDataKinds.Photo.PHOTO, photo);
values.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE);
if (photoId >= 0) {
MainApp.get().getContentResolver().update(
ContactsContract.Data.CONTENT_URI,
values,
ContactsContract.Data._ID + " = " + photoId, null);
} else {
MainApp.get().getContentResolver().insert(
ContactsContract.Data.CONTENT_URI,
values);
}