利用Contacts Provider读取手机联系人信息

article/2025/10/20 12:56:24

参考:https://developer.android.google.cn/guide/topics/providers/contacts-provider.html

Contacts Provider组织结构

Contacts Provider组织结构由三部分构成,如下图所示:
Contact结构

  • (联系人)Contact:代表联系人,包含了多种联系渠道。
  • (原始联系人)RawContact:每个原始联系人代表某个联系人的一种具体的联系渠道,比如E-mail、手机通讯录、推特等等。
  • (数据)Data:储存大多数实际的信息,比如手机号码、邮箱地址等等。

举例说明:假设手机用户为A,它有一个联系人B。A与B通过电子邮件、电话、推特三种渠道产生过联系,那么联系人B就对应三个原始联系人B,每个原始联系人B中会记录一种联系渠道(A使用的联系账户、账户类型),而具体的信息(手机号码、邮箱地址)会存放在数据表中。

Contact表、RawContact表、Data表之间的联系

Contact、RawContact、Data分别对应三张数据库表,三张表都有一个_ID字段作为主键。在此基础上,RawContact表有一个CONTACT_ID列,代表这个原始联系人对应的联系人的_ID;Data表有一个Raw_CONTACT_ID列,代表这个数据行对应的原始联系人的_ID。
因此,查询某个联系人的某项信息的一般步骤为:

  1. 在Contact表中查到该联系人对应的ID;
  2. 在RawContact表中查到该联系人ID对应的原始联系人的ID;
  3. 在Data表中查到原始联系人ID对应的数据行,并通过投影取得需要的数据。

实例:获取手机通讯录中所有联系人对应的手机号码

下面是一个用于加载联系人手机号码信息的ContactManager类,具有以下功能:

  • 判断应用是否具有读取手机通讯录的权限android.permission.READ_CONTACTS
  • 可以在创建对象时即开始加载,也可以在需要时再加载。
  • 在子线程中执行查询,不会阻塞UI线程。
  • 加载结束后通过一个UnmodifiableMap返回联系人姓名到电话号码的映射。
  • 支持设置加载完毕后执行的回调。

使用方法:通过静态方法getService()获取ContactManager实例,并设置是否需要立即开始加载、监听器等附加信息。

import android.Manifest;
import android.content.Context;
import android.content.pm.PackageManager;
import android.database.Cursor;
import android.provider.ContactsContract;
import android.support.annotation.Nullable;
import android.support.v4.content.ContextCompat;
import android.util.SparseArray;import java.util.Collections;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;/*** Created by swt369 on 2017/10/1.* Provide a simple way for managing contacts*/public class ContactManager {private <

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

相关文章

API Guides Contacts Provider

Contacts Provider Contacts Provider是Android的一个强大组件&#xff0c;它管理联系人的核心数据。你在手机联系人看到联系人信息&#xff0c;来源于Contact Provider。当然&#xff0c;你可以在自己的应用用访问ContactProvider的数据&#xff0c;也可以同步手机和服务…

Android官方文档—APP组件(Content Providers)(Contacts Provider)

通讯录内容提供者 Contacts Provider是一个功能强大且灵活的Android组件&#xff0c;用于管理设备的人员数据中​​央存储库。联系人提供程序是您在设备的联系人应用程序中看到的数据源&#xff0c;您还可以在自己的应用程序中访问其数据&#xff0c;并在设备和在线服务之间传…

理清contactsprovider

初步了解android contact provider android的联系人数据单独拿出来做成ContactsProvider&#xff0c;众多的table和view整体看下来&#xff0c;使得联系人的数据错综复杂。但是我们在开发的过程并不需要将所有的table都搞清楚。用到最多的是 ContactsContract.Contacts、Contac…

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…