最近在做一个项目,里面涉及到系统通讯录的问题,就做了一天多的尝试,也查看了一些网上的文章,做了简单的总结。
android的通讯录数据库存放在/data/data/com.android.contact.provider/contacts2.db中。这里面的几张表是有关系的:data,contacts,groups,mimetypes,raw_contacts.这五张表中的数据是相互关联的,所以在查询一些数据的时候,需要将表进行联系,但是android中对于系统的数据库,在查询的时候是不允许进行关联查询(除去系统提供的查询方式),这时候只能进行一张表一张表的操作。
上图便是数据库中的部分表。
data表:记录了用户的通讯录所有数据,包括手机号,显示名称等,但是里面的mimetype_id表示不同的数据类型。这与表mimetypes表中的_id相对应。raw_contact_id与下面的raw_contacts表中的_id相对应
mimetypes表:
在mimetype表中,我们注意_id = 5和11,稍后会使用
groups表,此表记录的是通讯录中的分组,其中account_name标识了这个分组属于那个用户。因为使用的同事的小米,所以其中一个账户是xiaomi。如果用其他手机,里面应该会是com.google的分组。在字段中有一个group_visible标识了当前组是否可见(0表示可见,1表示隐藏):
raw_contacts表中,有一个字段是contact_id,接下来会与下面的contacts表中的_id相关联。
contacts表,这个表中的name_raw_contact_id就与上面的raw_contacts表中的_id相对应。
上面是对5张表的简单概括,那么接下来将是如何去获取用户的手机号和名称。
如果自己观察data表和raw_contacts表,会发现,通讯录中显示的手机号存放在data表中,而对应的用户显示名称却是在raw_contacts中,所以当我们要去获取手机号对应的用户显示名称的时候,我们还需要去查看raw_contacts表中的值,这个中间对应的桥梁就是data表中raw_contact_id;
分享到:
相关推荐
开发者需要了解如何创建数据库、表结构以及执行CRUD(创建、读取、更新、删除)操作。 2. **ContentProvider**: - 为了在不同应用之间共享数据,Android引入了ContentProvider。在这个Demo中,开发者可能会实现一...
2. 表结构设计:设计联系人表,包含姓名、电话、邮箱等字段,通过SQLite的CREATE TABLE语句实现。 3. ContentProvider:作为数据访问接口,ContentProvider是Android系统中不同应用间共享数据的关键。我们需创建一...
在创建数据库时,需要定义数据库的版本号、数据库名称和数据库表结构。在本课题中,使用SQLiteOpenHelper类来创建员工信息表、基础工资设置表、岗位工资设置表、工龄工资设置表和管理员注册表。 知识点四:系统功能...
`onCreate()` 在首次创建数据库时调用,用于创建表结构;`onUpgrade()` 在升级数据库版本时调用,用于更新表结构。 ```java public class ContactDBHelper extends SQLiteOpenHelper { // 数据库版本号 private ...
你需要了解如何创建数据库表结构,定义数据字段,以及如何使用SQL语句进行数据的插入、更新和查询操作。此外,Android提供了ContentProvider组件,它是应用程序之间共享数据的标准接口,你在实现通讯录应用时会用到...
开发者需要编写SQL语句创建表结构,然后在代码中操作SQLiteOpenHelper进行数据的存取。同时,为了提高用户体验,可能还需要实现数据的异步加载和缓存策略。 权限管理也是不容忽视的一环。在Android系统中,访问联系...
ContentResolver与ContentProvider配合,让我们可以像操作数据库一样操作通讯录。 1. **获取通讯录权限**: 在Android 6.0(API级别23)及以上版本,应用需要在运行时请求权限,包括`READ_CONTACTS`和`WRITE_...
1. **SQLite数据库**:在Android系统中,通讯录数据通常存储在SQLite数据库中,开发者需要创建数据库表结构,设计数据模型,并实现增删改查(CRUD)操作。在源码中,可以找到关于数据库操作的相关类,如`...
开发者需要创建数据库表结构,定义字段,以及编写SQL语句进行数据的增、删、查、改操作。此外,Android提供了SQLiteOpenHelper类来辅助数据库版本管理和操作。 2. **ContentProvider**:为了实现不同应用间的数据...
总结,这个"android通讯录简单项目源码"涵盖了Android应用开发的核心技术,包括数据库操作、ContentProvider、UI设计、权限管理以及异步处理等。通过深入研究和理解这些知识点,你可以构建更复杂、功能丰富的Android...
源代码会展示如何创建数据库表、执行SQL语句,以及如何使用Content Resolver与数据库进行交互。 4. **联系人API**: Android提供了ContactsContract类,它是用于访问和操作联系人的API。开发者可以使用这个类来...
"简单的SQLite查询"这部分内容会介绍如何创建数据库表,插入、更新和删除数据,以及执行基本的查询操作,如SELECT语句,来获取并显示通讯录中的联系人信息。 在项目的文件列表中,我们看到以下几个关键文件: 1. `...
本文将深入探讨如何使用SQLite数据库来创建一个简单的Android通讯录应用。 首先,我们要了解Android中的SQLite数据库。SQLite是一个轻量级的关系型数据库,它无需服务器进程,可以直接嵌入到应用程序中。在Android...
7. **数据模型**:Android 2.2的通讯录源码定义了丰富的数据模型,如`RawContact`、`Data`、`Contact`等实体类,它们映射到数据库中的表,用于表示联系人的各个属性,如姓名、电话、邮箱等。 8. **性能优化**:源码...
【Android通讯录程序详解】 ...通过这个Android通讯录程序,开发者可以深入理解Android应用开发的基本流程,掌握数据库操作、UI设计、事件处理、权限管理和国际化等核心技能,为构建更复杂的Android应用打下坚实基础。
在`onCreate()`方法中,我们会编写创建表的SQL语句,而在`onUpgrade()`方法中,处理数据库版本升级时的表结构修改。 在Android SQLite 增、删、查、改操作源码.rar中,你可能会找到以下关键类和方法: 1. **...
开发者需要创建数据库表结构,执行SQL语句进行数据的插入、查询、更新和删除。 **3. Activity和Intent** - **Activity**:在Android中,Activity代表一个可视化的用户界面,它是应用与用户交互的主要入口。在这个...
1. **SQLite数据库**:SQLite是Android系统内置的关系型数据库,用于存储结构化的数据。在实现通讯录功能时,我们通常会创建一个`Contacts`表,包含`id`(主键)、`name`、`phone_number`等字段。使用...
你需要了解如何创建数据库表、执行查询以及插入和更新数据。 4. **Content Provider**:在Android中,访问系统服务,如联系人数据,通常通过Content Provider进行。开发者需要定义自己的Content Provider或者使用...
开发者需要创建表结构来存储联系人信息,如姓名、电话号码、电子邮件地址等,并实现相应的CRUD(创建、读取、更新、删除)操作。 其次,用户界面(UI)的设计和交互至关重要。Android提供了丰富的UI组件,如...