理清contactsprovider

article/2025/10/20 13:06:27
初步了解android contact provider
  
        android的联系人数据单独拿出来做成ContactsProvider,众多的table和view整体看下来,使得联系人的数据错综复杂。但是我们在开发的过程并不需要将所有的table都搞清楚。用到最多的是 ContactsContract.Contacts、ContactsContract.RawContacts、ContactsContract.Data这三张表格。

        先预览一下,一个联系人数据的存储结构:
可以很直观的看出。一个联系人在contacts2.db中(除了profile.db中的自己外),数据基本存放在3张表中,在ContactsContract.Contacts中会存在一条记录,在ContactsContract.RawContacts中可能存在多个记录,ContactsContract.Data中的数据是对ContactsContract.RawContacts的详细描述。
       
                     
                           (图1)
        ContactsContract.Contacts的表格大致如下,_id对应着的就是我们在contacts中看到的一个联系人。有一点需要注意的是,当删除掉一个联系人时,表中的记录会删除,但是_id并不会减少,而是一直增加,所以有可能看到的_id是1,2,4...这样的记录。

_id

starred

lookup

photo_id

1

0

 ...

<null>

2

0

 ...

<null>

4

1

 ...

1

       
        ContactsContract.RawContacts的表格结构大致如下,它里面的记录主要是针对特定账户下的联系人数据的描述(data表中的数据)。这边的contact_id对应的是contacts表中的_id,一个联系人在raw_contacts表格中可能存在一条以上的记录,这主要是由于caccount_name和account_type不同造成的。
        这边需要用一个例子来帮助理解:
假设我在我的手机上有三个账户 gaojian@gmail.com、gaojian3301@gmail.com,这两个账户的“同步联系人”都被check上,当我添加一个联系人到手机里时,这个联系人会同时被备份到这个两个账户中去,所以这两个记录在raw_contacts表格中的contact_id会一样。

_id

contact_id

account_name

account_type

deleted

1

1

gaojian@gmail.com

com.google

1

2

1

gaojian1305039@163.com

163.com

 0


        data表格中记录的数据是对raw_contacts中数据的详细描述。这边的data1存储的值就是联系人在搜索时会search的值;data15用来存储一些比较大的二进制对象,比如说联系人的头像缩略图。
这一边需要注意一个事情:在我们开发或者测试的过程中,不要将与MMIETYPE格式不匹配的数据存入data中(比如将email的值设置为1233445),这可能会造成data数据的丢失,更甚者会导致provider出问题(这个我猜测比如在发送Email的时候,去选择contacts,返回值可能会有问题,没有验证过)。

_id

raw_contact_id

mimetype_id

data1

data2

data15

1

1

6



<null>

2

1

5

110

1

<null>

3

3

6

gaojian

gao

<null>


        总结一下,我们可以从contacts中找到我们想要看的联系人,在raw_contacts中可以看到的是这个联系人一些数据的基本描述,而data提供给我们的是这个联系人所有的具体信息。这三张表格就是在平时开发中,打交道最多的表格。当然,如果要获取和修改群组的信息,那么还会接触到group这张表格;而筛选的表格对应的是search_index。
      
      放一张android官方api的图做个了断:
                                             



http://chatgpt.dhexx.cn/article/I2oyXCcE.shtml

相关文章

Android ContactsProvider源码分析

Android源码目录packages\providers下的应用是下载&#xff0c;通话等内置基本应用提供数据存储和操作的provider应用&#xff0c;本文章将针对ContactsProvider源码的架构和实现展开分析。&#xff08;注&#xff1a;本文使用使用android4.0版本进行分析&#xff09; 1、架构设…

ContactsProvider2

本篇不全也不细&#xff0c;只是根据按照个人理解和工作中遇到的问题&#xff0c;总结了个人认为的要点。 1. Android的数据库体系 1.1. 概述1.2 uri结构 2. ContactsProvider2 2.1. 概述2.2. Contacts2.db中的表2.3. ContactProvider2中的实现2.4. 批量访问 1. Android的数…

Android ContactProvider码源解析

Android Contacts源码解析2 4 ContactsProvider模块 1ContactsProvider简介2数据库创建3主要数据库的表结构相互关系 1data表2raw_contacts表3contacts表4mimetypes5其他表 文章转载自&#xff1a;https://blog.csdn.net/kafka_88/article/details/58585607 4&#xff0c;…

Contacts Provider基础

作为四大组件之一的ContentProvider工作中我们很少会用到自己自定义的ContentProvider,用到的最多的就是系统提供的。官方文档提供了两种系统ContentProvider,一种是CalendarProvider,一种是Contacts Provider。今天我们的主角就是Contact Provider。 The Contacts Provider is…

Error: invalid code, hints: [ req_id: * ]

1、问题描述&#xff1a;这个问题是在处理订单支付时需要用户登录遇到的&#xff0c;具体报错信息如下&#xff1a; 2、报错原因&#xff1a; 当前开发者的appid没有支付权限导致 3、解决方案&#xff1a; 需要负责人给分配对应的权限

This application’s bundle identifier does not match its code signing identifier.

今天使用carthage更新第三方后莫名出现真机云心失败,提示 This application’s bundle identifier does not match its code signing identifier. 解决方法: /usr/local/bin/carthage copy-frameworks 进入Building Phases 单击并在New Run Script Phase中添加脚本 将/usr/lo…

Code Sign error: a valid provisioning profile matching the application's Identifier 'com.yourcompany

出现这个错误的原因是因为&#xff1a;appid和provisioning profile不匹配 &#xff01;有两种解决的办法&#xff1a;重新下载provisioning profile&#xff0c;或者可能因为&#xff1a;生成证书和appid 所用的根证书不同&#xff0c;最好重新都生成然后下载。&#xff08;这…

ANTD react 手机号(验证码)登陆 + 账号登陆(图形验证码)

这种页面可能是大家常用的,但重写比较费时间,之前没有搜到完整的,在这里自己总结一下,方面复用 代码: <LoginFormformRef{formRef}initialValues{{autoLogin: false}}onFinish{async values > {await handleSubmit(values as LoginParams)}}><Tabs activeKey{type…

Springboot+axios+vue使用VerifyCodeUtils工具类实现验证码图片功能

一、环境准备 ideajava 1.8maven 3.6.3操作系统&#xff1a;window10vue.min.jsaxios.min.js 二、VerifyCodeUtils工具类 import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.RenderingHints; import ja…

Identity and Authentication - Common Authentication Methods

Username and Passwords This is the most common method of identifying users in the age of Software as a Service (SaaS) 解释上面的图中的步骤&#xff1a; Login Request: POST /login postuser {username: users,password: pws }Find users: SELECT * FROM databa…

iOS code signing identity 配置

PROJECT 和 TARGET 中都要选:code signing identity: 调试统一都选 developer, 发布统一都选 distribution provisioning Profile 也要选. 过期和无效的证书及时删除, 避免 ambiguous 警告. 选择正确的证书配置后仍然报错, clean 一下重启 xcode 还不行~~~重启电脑

Invalid CAPTCHA response. Please try again. (Code: 1201)

项目场景&#xff1a; Invalid CAPTCHA response. Please try again. (Code: 1201) 解决方案&#xff1a; 直接使用隐私浏览器打开即可。

经典的Embedding方法Word2vec

提起Embedding,就不得不提Word2vec,它不仅让词向量在自然语言处理领域再度流行&#xff0c;更为关键的是&#xff0c;自2013年谷歌提出Word2vec以来&#xff0c;Embedding 技术从自然语言处理领域推广到广告、搜索、图像、推荐等深度学习应用领域&#xff0c; 成了深度学习知识…

embedding表示方法及原理

目录 1.前言2.embedding表示方法2.1 word2vec embedding2.2 neural network embedding2.3 graph embedding 3.参考文献 1.前言 近几年embedding的使用及优化在各种比赛、论文中都有很多的应用&#xff0c;使用embedding表示特征的空间表示也在各种应用中确定是一种很有效的特征…

深度学习:词嵌入Embedding

http://blog.csdn.net/pipisorry/article/details/76095118 词嵌入 词嵌入其实就是将数据的原始表示表示成模型可处理的或者是更dense的低维表示&#xff08;lz&#xff09;。 One-hot Embedding 假设一共有个物体&#xff0c;每个物体有自己唯一的id&#xff0c;那么从物体…

什么是embedding(把物体编码为一个低维稠密向量),pytorch中nn.Embedding原理及使用

文章目录 使embedding空前流行的word2vec句子的表达训练样本损失函数输入向量表达和输出向量表达 v w v_{w} vw​ 从word2vec到item2vec讨论环节pytorch中nn.Embedding原理及使用pytorch中nn.Embedding原理及使用一些注意的点 参考 简单来说&#xff0c;embedding就是用一个低维…

讲清楚embedding到底在干什么

要搞清楚embeding先要弄明白他和one hot encoding的区别&#xff0c;以及他解决了什么one hot encoding不能解决的问题&#xff0c;带着这两个问题去思考&#xff0c;在看一个简单的计算例子 以下引用 YJango的Word Embedding–介绍 https://zhuanlan.zhihu.com/p/27830489 On…

一文读懂Embedding

文章目录 一、**什么是Embedding&#xff1f;**二、One-Hot编码三、**怎么理解Embedding****四、Word Embedding** 一、什么是Embedding&#xff1f; “Embedding”直译是嵌入式、嵌入层。 简单来说&#xff0c;我们常见的地图就是对于现实地理的Embedding&#xff0c;现实的…

Embedding的理解

Embedding 嵌入&#xff0c;我们可以将其理解为一种降维行为。可以将高维数据映射到低维空间来解决稀疏输入数据的问题。 它主要有以下三个目的&#xff1a; 在 embedding 空间中查找最近邻&#xff0c;这可以很好的用于根据用户的兴趣来进行推荐。作为监督性学习任务的输…

BERT的三个Embedding详解

BERT将输入文本中的每一个词&#xff08;token)送入token embedding层从而将每一个词转换成向量形式 两个嵌入层&#xff0c;segment embeddings和 position embeddings token embedding token embedding 层是要将各个词转换成固定维度的向量。在BERT中&#xff0c;每个词会被…