android_内容访问者去访问联系人

本文介绍如何使用ContentResolver查询Android设备上的联系人信息,包括从raw_contacts表和data表获取联系人ID及相关数据的过程。探讨了mimetype在查询中的特殊作用及联系人删除的实现方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    public void query(View v){


        //需求: 查询所有的联系人

        //1. 查询raw_contacts表

        ContentResolver resolver = getContentResolver();

        Uri contactUri= Uri.parse("content://com.android.contacts/raw_contacts");
        Uri dataUri= Uri.parse("content://com.android.contacts/data");

        Cursor  cursor =resolver.query(contactUri, new String[]{"contact_id"}, null, null, null);
        while(cursor.moveToNext()){
            //这里仅仅是遍历得到每一个联系人的id而已,接下来要做的工作就是去查询data表, 根据id去查询
            String id = cursor.getString(0);


            //根据id去查询data表
            Cursor dataCursor = resolver.query(dataUri, new String[]{"data1" ,"mimetype"}, "raw_contact_id=?", new String[]{id}, null);
            while(dataCursor.moveToNext()){
                String data =dataCursor.getString(0);
                String mimetype =dataCursor.getString(1);
                Log.d(TAG, "data==="+data+"--mimetype-"+mimetype);
            }
            dataCursor.close();


        }
        cursor.close();

    }

下面有介绍源代码和数据库的截图
这里写图片描述
这里写图片描述

数据库的截图
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

查询联系人

  • 为什么mimetype_id查询不了

原因是在源码中有一个map集合,用于过滤来查询的字段,如果在map中存在这个字段,那么就可以查询,否则将抛出异常。

  • 为什么mimetype反而能够查询

因为真正插叙你的时候,并不是查询data表,而是查询view-data表。

删除联系人

android并没有直接删除这个联系人,而是把row_contacts表里面contact_id 置为null.
,以后要与云端数据对接的时候,就比较费劲。所以这里取巧了,只是变了一个标记位而已。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值