Android获取联系人头像的方法

 更新时间:2016年08月18日 11:48:12   作者:老舟  
这篇文章主要介绍了Android获取联系人头像的方法,结合实例形式分析了Android调用联系人头像的相关操作技巧,涉及Bitmap对象及ImageView的使用方法,需要的朋友可以参考下

本文实例讲述了Android获取联系人头像的方法。分享给大家供大家参考,具体如下:

public byte[] getPhoto(String people_id) {
String photo_id = null;
String selection1 = ContactsContract.Contacts._ID + " = " + people_id;
Cursor cur1 = getContentResolver().query(
ContactsContract.Contacts.CONTENT_URI, null, selection1, null, null);
if (cur1.getCount() > 0)
{
cur1.moveToFirst();
photo_id = cur1.getString(cur1.getColumnIndex(ContactsContract.Contacts.PHOTO_ID));
//System.out.println("photo_id:" + photo_id);
}
String[] projection = new String[]
{
ContactsContract.Data.DATA15
};
String selection = ContactsContract.Data._ID + " = " + photo_id;
Cursor cur = getContentResolver().query(
ContactsContract.Data.CONTENT_URI, projection, selection, null, null);
cur.moveToFirst();
byte[] contactIcon = cur.getBlob(0);
System.out.println("conTactIcon:" + contactIcon);
if (contactIcon == null) {
return null;
} else {
return contactIcon;
}
}

以下代码将字节数组转化成Bitmap对象,然后再ImageView中显示出来

private ImageView image;
byte[] photo = getPhoto(contactId);
Bitmap map = BitmapFactory.decodeByteArray(photo, 0,photo.length);
image.setImageBitmap(map);

通过代码设置Android联系人的头像:

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);
}
}

更多关于Android相关内容感兴趣的读者可查看本站专题:《Android开发入门与进阶教程》、《Android视图View技巧总结》、《Android编程之activity操作技巧总结》、《Android操作SQLite数据库技巧总结》、《Android操作json格式数据技巧总结》、《Android数据库操作技巧总结》、《Android文件操作技巧汇总》、《Android编程开发之SD卡操作方法汇总》、《Android资源操作技巧汇总》及《Android控件用法总结

希望本文所述对大家Android程序设计有所帮助。

相关文章

  • Android实现三段式滑动效果

    Android实现三段式滑动效果

    最近发现很多app都使用了三段式滑动,比如说高德的首页和某宝等物流信息都是使用的三段式滑动方式,谷歌其实给了我们很好的2段式滑动,就是BottomSheet,所以这次我也是在这个原理基础上做了一个小小的修改来实现我们今天想要的效果。
    2021-06-06
  • Activity透明/半透明效果的设置transparent(两种实现方法)

    Activity透明/半透明效果的设置transparent(两种实现方法)

    两种方法实现Activity透明/半透明效果的设置,代码思路很有调理,感兴趣的朋友可以参考下,希望本文可以帮助到你
    2013-02-02
  • Android Compose Column列表不自动刷新问题

    Android Compose Column列表不自动刷新问题

    这篇文章主要介绍了Android Compose Column列表数据更新列表不刷新的问题,总的来说这并不是一道难题,那为什么要拿出这道题介绍?拿出这道题真正想要传达的是解题的思路,以及不断优化探寻最优解的过程。希望通过这道题能给你带来一种解题优化的思路
    2023-01-01
  • Android ListView实现仿iPhone实现左滑删除按钮的简单实例

    Android ListView实现仿iPhone实现左滑删除按钮的简单实例

    下面小编就为大家带来一篇Android ListView实现仿iPhone实现左滑删除按钮的简单实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-08-08
  • Android画中画窗口开启方法

    Android画中画窗口开启方法

    Android8.0 Oreo(API Level26)允许活动启动画中画Picture-in-picture(PIP)模式。PIP是一种特殊类型的多窗口模式,主要用于视频播放。PIP模式已经可用于Android TV,而Android8.0则让该功能可进一步用于其他Android设备
    2023-01-01
  • CDC与BG-CDC的含义电容触控学习整理

    CDC与BG-CDC的含义电容触控学习整理

    今天小编就为大家分享一篇关于CDC与BG-CDC的含义电容触控学习整理,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-12-12
  • 快速处理ListView为空的情况

    快速处理ListView为空的情况

    下面小编就为大家带来一篇快速处理ListView为空的情况。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-04-04
  • android多开器解析与检测实现方法示例

    android多开器解析与检测实现方法示例

    最近有业务上的要求,要求app在本地进行诸如软件多开、hook框架、模拟器等安全检测,防止作弊行为,下面这篇文章主要给大家介绍了关于android多开器解析与检测实现的相关资料,需要的朋友可以参考下
    2021-08-08
  • Android studio 添加assets文件夹的方法

    Android studio 添加assets文件夹的方法

    这篇文章主要介绍了Android studio 添加assets文件夹的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-07-07
  • Android将Glide动态加载不同大小的图片切圆角与圆形的方法

    Android将Glide动态加载不同大小的图片切圆角与圆形的方法

    这篇文章主要给大家介绍了关于Android如何将Glide动态加载不同大小的图片切圆角与圆形的方法,文中通过示例代码介绍的非常吸纳关系,对各位Android开发者们具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧。
    2017-11-11

最新评论