`
zengyan2012
  • 浏览: 414248 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论
阅读更多

 

//设置头像(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/

分享到:
评论

相关推荐

    android 自定义头像通讯录

    例如,加载大量联系人头像时,需要考虑如何避免内存溢出,可能采用了LruCache或者 Fresco这样的图片加载库来解决这个问题。同时,为了保证用户体验,可能还对UI进行了流畅性优化,如使用AsyncTask进行异步加载。 ...

    android 联系人模块例子

    下面我们将深入探讨这个话题,了解Android联系人API的使用以及如何构建联系人管理模块。 首先,Android的联系人数据存储在系统数据库中,开发者可以通过Content Provider接口进行访问。Content Provider是Android...

    获取本地联系人的头像并显示

    这里的photoUri是联系人头像的URI,而photoId则是头像的实际ID。注意,不是所有的联系人都有头像,所以在实际操作中需要进行判断。 接下来,我们需要获取头像的二进制数据。这可以通过InputStream实现: ```java ...

    android 联系人模块

    可以获取联系人的头像,ContactsContract.CommonDataKinds.Photo类提供了获取联系人图片URI的方法。 8. **同步适配器**: 如果应用需要同步联系人数据,可以使用Android的SyncAdapter框架。这允许应用在后台运行...

    android读取联系人信息,姓名,电话,头像

    4. **获取联系人头像**: - 要获取联系人的头像,需要使用`ContactsContract.CommonDataKinds.Photo`表的Uri。 - 当查询结果中包含`ContactsContract.CommonDataKinds.Photo.PHOTO_ID`时,可以获取到联系人的照片...

    Android获取联系人头像的方法

    在Android开发中,获取和展示联系人头像是一个常见的需求。本文将详细解析如何在Android系统中获取联系人的头像,并将其显示在ImageView组件上。首先,我们需要理解Android的联系人存储模型,这涉及到...

    Android实现联系人(滑动选择年龄,拍照,圆形头像)

    这个项目,"Android实现联系人(滑动选择年龄,拍照,圆形头像)",聚焦于提供一种用户友好的体验,通过滑动选择年龄、自定义头像拍摄以及采用圆形头像展示来增强联系人管理功能。 首先,我们来探讨滑动选择年龄的...

    android 带头像的二维码

    这里的数据可以是URL、联系人信息等任何符合二维码编码规则的内容。 4. **合并头像和二维码**:在BitMatrix上添加头像图像。我们需要将头像的灰度图像转换为BitMatrix,然后在二维码的中心位置插入。这通常涉及到位...

    Android@联系人功能

    列表项应包含联系人头像、姓名等信息,并实现点击事件监听,以便用户选择联系人。 4. **处理选择结果**:用户选定联系人后,将联系人的名字插入到文本输入框中,并更新输入框的光标位置。同时,可能还需要保存被@...

    联系人头像

    "联系人头像"这个主题就聚焦于如何让手机联系人拥有图片显示,通过丰富的图片资源来装饰我们的通讯录。 首先,我们需要理解手机系统对联系人头像的支持方式。大多数现代智能手机,如Android和iOS系统,都内置了对...

    Android-通过用户名首字母生成头像ImageView控件

    这个功能在社交应用或者联系人列表中很常见,特别是在用户没有上传真实头像的情况下。标题所提及的“Android-通过用户名首字母生成头像ImageView控件”就是这样一个功能,它根据用户的姓名首字母创建一个代表性的...

    Android-ContactSelector联系人选择器选择联系人

    每个条目可能包含联系人的姓名、头像等信息。点击条目后,可以弹出一个确认对话框或直接回调选择结果。 4. **数据加载优化**:由于联系人数据量可能很大,所以需要进行异步加载和分页显示。使用CursorLoader或...

    android 加载本地联系人实现方法

    以上就是Android中加载本地联系人的一种实现方法,可以根据实际需求进行调整和优化,比如增加头像显示、分组显示等高级功能。通过这种方式,开发者能够方便地将用户的联系人信息整合到自己的应用程序中。

    Android高仿微信头像裁剪

    在Android开发中,实现“高仿微信头像裁剪”是一项常见的需求,它涉及到用户界面设计、图片处理以及手势操作等多个技术领域。微信作为中国最流行的社交应用之一,其头像裁剪功能的设计和用户体验备受开发者关注。接...

    Android 更换头像源码(适配7.0以后)

    此外,`ContentProvider`可能被用来创建一个安全的共享`Uri`,以便其他应用(如设置为联系人头像)可以访问。 在处理图片时,考虑到性能和内存管理,源码可能采用了`BitmapFactory.Options`进行缩放加载,避免加载...

    android:微信联系人效果

    在Android开发中,实现“微信联系人效果”通常是指创建一个与微信应用中类似的联系人列表界面,这个界面具有高效、美观且用户友好的特点。要实现这样的效果,我们需要涉及多个技术点,包括数据获取、数据显示、搜索...

    Android手机的通讯录联系人信息.zip

    10. **联系人照片**:联系人信息中还包括头像,开发者可以读取或设置联系人的图片,这涉及到ContactsContract.CommonDataKinds.Photo表。 通过研究和学习这个源码,开发者不仅能了解如何操作Android的通讯录,还能...

    Android代码-用 ImageView 实现头像

    在做电话本或者其他应用时,显示联系人头像的策略一般是这样的:先判断是否有头像图片,如果有,则直接显示图片;如果没有,则显示联系人的名字的第一个字,将这个文字作为头像,并添加背景颜色。如果设置的文字的...

    Android根据电话号码获得联系人头像实例代码

    在日常Android手机的使用过程中,根据电话号码获得联系人头像,是经常会碰到的问题。本文即以实例形式讲述了Android根据电话号码获得联系人头像是实现代码。分享给大家供大家参考之用。具体方法如下: 首先,通过...

    android联系人布局

    4. **ImageView**:显示联系人头像,通常会加载从本地或网络获取的图片资源。 5. **TextView**:用于展示联系人的姓名、电话号码等文本信息。 6. **CardView**:为了提供更好的视觉效果,我们可以使用CardView将每...

Global site tag (gtag.js) - Google Analytics