//设置头像(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/
分享到:
相关推荐
例如,加载大量联系人头像时,需要考虑如何避免内存溢出,可能采用了LruCache或者 Fresco这样的图片加载库来解决这个问题。同时,为了保证用户体验,可能还对UI进行了流畅性优化,如使用AsyncTask进行异步加载。 ...
下面我们将深入探讨这个话题,了解Android联系人API的使用以及如何构建联系人管理模块。 首先,Android的联系人数据存储在系统数据库中,开发者可以通过Content Provider接口进行访问。Content Provider是Android...
这里的photoUri是联系人头像的URI,而photoId则是头像的实际ID。注意,不是所有的联系人都有头像,所以在实际操作中需要进行判断。 接下来,我们需要获取头像的二进制数据。这可以通过InputStream实现: ```java ...
可以获取联系人的头像,ContactsContract.CommonDataKinds.Photo类提供了获取联系人图片URI的方法。 8. **同步适配器**: 如果应用需要同步联系人数据,可以使用Android的SyncAdapter框架。这允许应用在后台运行...
4. **获取联系人头像**: - 要获取联系人的头像,需要使用`ContactsContract.CommonDataKinds.Photo`表的Uri。 - 当查询结果中包含`ContactsContract.CommonDataKinds.Photo.PHOTO_ID`时,可以获取到联系人的照片...
在Android开发中,获取和展示联系人头像是一个常见的需求。本文将详细解析如何在Android系统中获取联系人的头像,并将其显示在ImageView组件上。首先,我们需要理解Android的联系人存储模型,这涉及到...
这个项目,"Android实现联系人(滑动选择年龄,拍照,圆形头像)",聚焦于提供一种用户友好的体验,通过滑动选择年龄、自定义头像拍摄以及采用圆形头像展示来增强联系人管理功能。 首先,我们来探讨滑动选择年龄的...
这里的数据可以是URL、联系人信息等任何符合二维码编码规则的内容。 4. **合并头像和二维码**:在BitMatrix上添加头像图像。我们需要将头像的灰度图像转换为BitMatrix,然后在二维码的中心位置插入。这通常涉及到位...
列表项应包含联系人头像、姓名等信息,并实现点击事件监听,以便用户选择联系人。 4. **处理选择结果**:用户选定联系人后,将联系人的名字插入到文本输入框中,并更新输入框的光标位置。同时,可能还需要保存被@...
"联系人头像"这个主题就聚焦于如何让手机联系人拥有图片显示,通过丰富的图片资源来装饰我们的通讯录。 首先,我们需要理解手机系统对联系人头像的支持方式。大多数现代智能手机,如Android和iOS系统,都内置了对...
这个功能在社交应用或者联系人列表中很常见,特别是在用户没有上传真实头像的情况下。标题所提及的“Android-通过用户名首字母生成头像ImageView控件”就是这样一个功能,它根据用户的姓名首字母创建一个代表性的...
每个条目可能包含联系人的姓名、头像等信息。点击条目后,可以弹出一个确认对话框或直接回调选择结果。 4. **数据加载优化**:由于联系人数据量可能很大,所以需要进行异步加载和分页显示。使用CursorLoader或...
以上就是Android中加载本地联系人的一种实现方法,可以根据实际需求进行调整和优化,比如增加头像显示、分组显示等高级功能。通过这种方式,开发者能够方便地将用户的联系人信息整合到自己的应用程序中。
在Android开发中,实现“高仿微信头像裁剪”是一项常见的需求,它涉及到用户界面设计、图片处理以及手势操作等多个技术领域。微信作为中国最流行的社交应用之一,其头像裁剪功能的设计和用户体验备受开发者关注。接...
此外,`ContentProvider`可能被用来创建一个安全的共享`Uri`,以便其他应用(如设置为联系人头像)可以访问。 在处理图片时,考虑到性能和内存管理,源码可能采用了`BitmapFactory.Options`进行缩放加载,避免加载...
在Android开发中,实现“微信联系人效果”通常是指创建一个与微信应用中类似的联系人列表界面,这个界面具有高效、美观且用户友好的特点。要实现这样的效果,我们需要涉及多个技术点,包括数据获取、数据显示、搜索...
10. **联系人照片**:联系人信息中还包括头像,开发者可以读取或设置联系人的图片,这涉及到ContactsContract.CommonDataKinds.Photo表。 通过研究和学习这个源码,开发者不仅能了解如何操作Android的通讯录,还能...
在做电话本或者其他应用时,显示联系人头像的策略一般是这样的:先判断是否有头像图片,如果有,则直接显示图片;如果没有,则显示联系人的名字的第一个字,将这个文字作为头像,并添加背景颜色。如果设置的文字的...
在日常Android手机的使用过程中,根据电话号码获得联系人头像,是经常会碰到的问题。本文即以实例形式讲述了Android根据电话号码获得联系人头像是实现代码。分享给大家供大家参考之用。具体方法如下: 首先,通过...
4. **ImageView**:显示联系人头像,通常会加载从本地或网络获取的图片资源。 5. **TextView**:用于展示联系人的姓名、电话号码等文本信息。 6. **CardView**:为了提供更好的视觉效果,我们可以使用CardView将每...