Android语言基础教程(205)Android预定义Content Provider范例之查询联系人ID和姓名:Android联系人读取全攻略:原来Content Provider可以这么玩!

你的App离“社交达人”只差一个Content Provider的距离

第一部分:Content Provider:Android的数据“大总管”

在深入联系人查询之前,我们先来快速了解一下Content Provider到底是什么。简单来说,Content Provider是Android系统中的一个组件,它充当了应用程序之间数据共享的桥梁。

想想看,当多个应用都需要访问相同的数据(如联系人、日历、媒体文件)时,如果没有Content Provider,每个应用都需要自己实现一套数据访问逻辑,这不仅效率低下,而且安全隐患巨大。

Content Provider通过提供统一的接口,让授权应用可以安全地访问其他应用的数据,就像是给每个数据源配备了专业的“接待员”,他知道什么数据可以共享,什么需要保密。

Android系统已经为我们预定义了一系列Content Provider,联系人是其中最常见也是最复杂的一个。通过ContactsContract API,我们可以访问到手机中存储的联系人信息。

第二部分:权限:进入联系人世界的“钥匙”

在Android系统中,访问联系人是一项敏感操作,需要用户明确授权。这就像是你要进入别人的私人领地,必须先获得许可一样。

在你的AndroidManifest.xml文件中,需要添加以下权限:

<uses-permission android:name="android.permission.READ_CONTACTS" />

如果是更高级的操作,可能还需要:

<uses-permission android:name="android.permission.WRITE_CONTACTS" />

需要注意的是,从Android 6.0(API级别23)开始,Android引入了运行时权限机制。这意味着即使你在Manifest中声明了权限,仍然需要在运行时请求用户授权。这是保护用户隐私的重要机制,也是我们开发者必须遵守的规则。

第三部分:联系人数据库的“三驾马车”

要高效地查询联系人,首先需要了解Android联系人数据库的基本结构。联系人数据存储在三个核心表中,它们各司其职,共同构成了联系人的完整信息。

  1. ContactsContract.Contacts表:存储每个联系人的汇总信息,每个联系人对应一条记录。就像是联系人的“身份证”,只包含最基础的身份信息。
  2. ContactsContract.RawContacts表:存储基于特定账户的联系人数据。一个人可能有多个RawContact,比如同一个联系人在Google账户和WhatsApp账户中都有记录。
  3. ContactsContract.Data表:存储联系人的所有详细数据,如电话号码、邮箱、地址等。这是信息量最丰富的表,包含了联系人的一切细节。

理解这三张表的关系至关重要:一个Contacts可以有多个RawContacts,一个RawContacts可以有多个Data条目。这种设计允许Android将不同账户来源的同一联系人自动聚合起来,提供统一的视图。

第四部分:实战:查询联系人ID和姓名

现在,让我们进入最激动人心的部分——实际编码查询联系人的ID和姓名。

基础方法:直接查询Contacts表

最简单的方法是直接查询ContactsContract.Contacts表,获取联系人的ID和显示名称:

public String getContactInfo() {
    String result = "";
    ContentResolver resolver = getContentResolver();
    Uri contactUri = ContactsContract.Contacts.CONTENT_URI;
    
    // 查询联系人ID和姓名
    Cursor cursor = resolver.query(contactUri, 
        new String[]{ContactsContract.Contacts._ID, 
                    Cont
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

值引力

持续创作,多谢支持!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值