我必须将照片添加到联系方式(见下文)。它仅在我的设备上创建联系人时起作用。当从谷歌服务获得(同步)联系时它不起作用。我在运行时没有任何错误。 我的设备正在使用 Android 4.1.1
public static void writeDisplayPhoto(ContentResolver c, Bitmap contactPhoto, long personId) {
// control args
if ((contactPhoto == null)||(c==null)||(personId==0l)) {
return;
}
// convert bitmap to byte
ByteArrayOutputStream bos = new ByteArrayOutputStream();
contactPhoto.compress(CompressFormat.PNG, 0 /*ignored for PNG*/, bos);
byte[] photo = bos.toByteArray();
Log.i("CallWidgetConfig::writeDisplayPhoto()","personId: "+personId);
// set tpoto to contact
Uri rawContactPhotoUri = Uri.withAppendedPath(
ContentUris.withAppendedId(RawContacts.CONTENT_URI, personId),
RawContacts.DisplayPhoto.CONTENT_DIRECTORY);
try {
AssetFileDescriptor fd =
c.openAssetFileDescriptor(rawContactPhotoUri, "rw");
OutputStream os = fd.createOutputStream();
os.write(photo);
os.close();
fd.close();
} catch (Exception e) {
Log.i("CallWidgetConfig::writeDisplayPhoto()",e.getMessage());
}
}
第二种方式:
public static void setContactPhoto(ContentResolver c, Bitmap contactPhoto, long personId) {
if ((contactPhoto == null)||(c==null)||(personId==0l)) {
return;
}
ByteArrayOutputStream bos = new ByteArrayOutputStream();
contactPhoto.compress(CompressFormat.PNG, 0 /*ignored for PNG*/, bos);
byte[] bytes = bos.toByteArray();
int photoRow = -1;
String where = Data.RAW_CONTACT_ID + " = " + personId + " AND "
+ Data.MIMETYPE + "=='" + Photo.CONTENT_ITEM_TYPE
+ "'";
Cursor cursor = null;
try {
cursor = c.query(Data.CONTENT_URI, null, where, null, null);
int idIdx = cursor.getColumnIndexOrThrow(Data._ID);
if (cursor.moveToFirst()) {
photoRow = cursor.getInt(idIdx);
Log.i("CallWidgetConfig::setContactPhoto()","photoRow: "+photoRow);
}
}
catch (Exception e) {
Log.i("CallWidgetConfig::setContactPhoto()",e.getMessage());
if (cursor!=null) {
cursor.close();
}
return;
}
ContentValues values = new ContentValues();
values.put(Data.RAW_CONTACT_ID, personId);
values.put(Data.IS_SUPER_PRIMARY, 1);
values.put(Photo.PHOTO, bytes);
values.put(Data.MIMETYPE, Photo.CONTENT_ITEM_TYPE);
if (photoRow >= 0) {
Log.i("CallWidgetConfig::setContactPhoto()","Update()");
c.update(Data.CONTENT_URI, values, Data._ID + " = " + photoRow, null);
} else {
Log.i("CallWidgetConfig::setContactPhoto()","Insert()");
c.insert(Data.CONTENT_URI, values);
}
cursor.close();
}