//设置头像(Android SDK 1.6以后联系人格式进行的升级,以下为设置联系人头像的代码,兼容目前所有SDK)
private final static boolean OldSDK = (System.getSDKVersionNumber()< 5 )? true : false;
public static void setPersonPhotoBytes(Context context,byte[] b, long persionID, boolean Sync) {
if (OldSDK){
Uri myPerson = ContentUris.withAppendedId(People.CONTENT_URI, persionID);
People.setPhotoData(context.getContentResolver(), myPerson, b);
if (! Sync){
ContentValues values = new ContentValues();
values.put("_sync_dirty", 0);
context.getContentResolver().update(myPerson, values, null, null);
}
}
else
setContactPhoto5(context.getContentResolver(), b, persionID, Sync);
}
private static void setContactPhoto5(ContentResolver c, byte[] bytes,long personId, boolean Sync) {
ContentValues values = new ContentValues();
Uri u = Uri.parse("content://com.android.contacts/data");
int photoRow = -1;
String where ="raw_contact_id = " + personId + " AND mimetype ='vnd.android.cursor.item/photo'";
Cursor cursor = c.query(u, null, where, null, null);
int idIdx = cursor.getColumnIndexOrThrow("_id");
if (cursor.moveToFirst()) {
photoRow = cursor.getInt(idIdx);
}
cursor.close();
values.put("raw_contact_id", personId);
values.put("is_super_primary", 1);
values.put("data15", bytes);
values.put("mimetype","vnd.android.cursor.item/photo");
if (photoRow >= 0) {
c.update(u, values, " _id= " + photoRow, null);
} else {
c.insert(u, values);
}
if (! Sync){
u = Uri.withAppendedPath(Uri.parse("content://com.android.contacts/raw_contacts"), String.valueOf(personId));
values = new ContentValues();
values.put("dirty", 0);
c.update(u, values, null, null);
}
}
---------------------------------------------------------------------------------------
//获取头像
private final static boolean OldSDK = (System.getSDKVersionNumber()< 5 )? true : false;
public static Bitmap getContactPhoto(Context context, long pid,int defaultIco){
if (OldSDK){
Uri uri = ContentUris.withAppendedId(People.CONTENT_URI, pid);
return People.loadContactPhoto(context, uri,defaultIco, null);
}
else
return getContactPhoto5(context, pid, defaultIco);
}
private static Bitmap getContactPhoto5(Context c, long personId,int defaultIco){
byte[] data = new byte[0];
Uri u = Uri.parse("content://com.android.contacts/data");// AND (is_super_primary =1 or is_primary=1)
String where ="raw_contact_id = " + personId + " AND mimetype ='vnd.android.cursor.item/photo'";
Cursor cursor = c.getContentResolver().query(u, null, where, null, null);
if (cursor.moveToFirst()) {
data = cursor.getBlob(cursor.getColumnIndex("data15"));
}
cursor.close();
if (data ==null ||data.length == 0){
return BitmapFactory.decodeResource(c.getResources(), defaultIco);
}
else
return BitmapFactory.decodeByteArray(data, 0, data.length);
}
-------------------------------------------------------------------------------------------------------------------
//修改 (SDK--->2.1)
public static void setContactPhoto(ContentResolver c, byte[] bytes,
long personId) {
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, bytes);
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);
}
}
转自:http://blog.smalldemon.org/