底部的代码显示了我如何更新应用中的联系人图片。如果用户使用SIM卡,手机和谷歌联系人等,这种方法效果很好。但如果他使用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);
}
答案 0 :(得分:2)
每个SyncAdapters
都有一个名为supportsUploading
的配置设置为true或false。
您不应该修改由SyncAdapter同步并且supportsUploading设置为false的帐户RawContacts,因为很可能您的更改很快就会被SyncAdapter覆盖。
您可以使用以下代码检查所有supportsUploading
的{{1}}值:
SyncAdapters
为了为只读SyncAdapter同步的联系人设置不同的图片,您可以在自己的帐户(preferably under your own SyncAdapter)和Outlook创建的join that new RawContact with the existing RawContact下创建新的RawContact,然后您可以在您自己的图片上设置SUPER_PRIMARY,因此它将成为默认图片。