Android中ContentResolver

关于Android中的ContntResolver

Android中有个ContentProvider(内容提供者)还有个ContentResolver(内容解析者)

简单的来说ContentProvider就是将自己App的数据库共享,使得其他App可以访问本App的数据,而ContentResolver就是用来访问其他App的数据库的,下面看一则实例


获取手机的联系人及头像

public static void getContactsInfo(Context context) {
        //1. 获取内容解析者
        ContentResolver contentResolver = context.getContentResolver();
        // ContactsContract 联系人的API
        Uri uri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI;
        String[] projection = new String[]{
                ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,
                ContactsContract.CommonDataKinds.Phone.NUMBER,
                ContactsContract.CommonDataKinds.Phone.CONTACT_ID
        };
        //2.查询操作
        //uri               :查询地址
        //projection        :查询的数据字段名称
        //selection         :查询的条件 where id=..
        //selectionArgs     :查询条件的参数
        //sortOrder         :排序s
//        contentResolver.query(uri, projection, selection, selectionArgs, sortOrder);
        Cursor cursor = contentResolver.query(uri, projection, null, null, null);
        while (cursor.moveToNext()) {
            String name = cursor.getString(0);
            String number = cursor.getString(1);
            int id = cursor.getInt(2);
            Bitmap bitmap = getContactPhoto(context, id);
            if (null == bitmap) {
                Log.e("Contact", "id: " + id + " 头像不为空");
            } else {
                Log.e("Contact", "id: " + id + " 头像为空");
            }
        }
    }

    public static Bitmap getContactPhoto(Context context, int id) {
        ContentResolver contentResolver = context.getContentResolver();
//        Uri uri = ContactsContract.Contacts.CONTENT_URI;
        //拼接路径
        //http://www.baidu.com/jdk
        //参数一:表的路径
        //参数二:联系人具体的路径
        Uri uri = Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_URI, id + "");
        //获取联系人头像,以流的方式返回
        InputStream is = ContactsContract.Contacts.openContactPhotoInputStream(contentResolver, uri);
        Bitmap bitmap = BitmapFactory.decodeStream(is);
        if (is != null) {
            try {
                is.close();
                is = null;
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return bitmap;
    }

上面就是获取手机联系人的代码了,也是一个内容解析者的使用实例,如果大家需要获取手机中的联系人,只需要将上段代码拷贝过去就行了。
所要注意的是Url,Url使用来区分不同应用程序的。


关于ContactsContract这个类,由于Android的碎片化极其严重,各个手机品牌有不同的ROOM,这使得Android的软件开发不容易做适配,Google已经想到这一点了,定义了一个标准,所有的厂家都遵循这个标准,而对于我们开发者来说只需要使用这个Api就行了,而这个ContactsContract类就是Google用来适配的,通过这个类我们可以来获取手机中的联系人,而不用担心适配问题。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值