织梦CMS - 轻松建站从此开始!

欧博ABG-会员注册-官网网址

当前位置: 欧博ABG-会员注册-官网网址 > abg欧博 > 文章页

Android 获取联系人

时间:2024-06-12 14:49来源: 作者:admin 点击: 19 次
Android系统中的联系人也是通过ContentProvider来对外提供数据的 数据库路径为:/data/data/com.android.providers.contacts/database/contacts2.db 我们需要关注的有3张表 - raw_contacts:其中保存了联系人id

Android 获取联系人

Android系统中的联系人也是通过ContentProvider来对外提供数据的
数据库路径为:/data/data/com.android.providers.contacts/database/contacts2.db
我们需要关注的有3张表
– raw_contacts:其中保存了联系人id
– data:和raw_contacts是多对一的关系,保存了联系人的各项数据
– mimetypes:为数据类型

先查询raw_contacts得到每个联系人的id,在使用id从data表中查询对应数据,根据mimetype分类数据这地方在数据库中的是一个mimetype_id
是一个外键引用到了mimetype这个表中,它内部做了一个关联查询,这地方不能写mimetype_id,只能写mimetype不然会报错

/** * 获取联系人 * @return */ public static List<ContactInfo> getContactInfos(Context context) { ContentResolver resolver = context.getContentResolver(); Uri uri = Uri.parse("content://com.android.contacts/raw_contacts"); Uri dataUri = Uri.parse("content://com.android.contacts/data"); List<ContactInfo> contactInfos = new ArrayList<ContactInfo>(); Cursor cursor = resolver.query(uri, new String[] { "contact_id" }, null, null, null); while (cursor.moveToNext()) { String id = cursor.getString(0); if (id != null) { ContactInfo info = new ContactInfo(); Cursor dataCursor = resolver.query(dataUri, new String[] { "mimetype", "data1" }, "raw_contact_id=?", new String[] { id }, null); while (dataCursor.moveToNext()) { if("vnd.android.cursor.item/name".equals( dataCursor.getString(0))){ info.setName(dataCursor.getString(1)); }else if("vnd.android.cursor.item/phone_v2".equals( dataCursor.getString(0))){ info.setPhone(dataCursor.getString(1)); } } contactInfos.add(info); dataCursor.close(); } } cursor.close(); return contactInfos; }

要使用到这三个表,但是谷歌内部在查询这个data表的时候内部使用的并不是查询data表而是查询了data表的视图,
这个视图中直接将mime_Type类型给关联好了,所以这里直接查询的就是mimetype这个类型就可以了,
还有就是如果自己的手机中如果删除了一个联系人在查询的时候就会报错,这里因为是在手机中删除一个联系人的时候并不是清空数据库中的数据,
而是将这个raw_contacks中的id置为null,所以会报错,这里就要进行判断一下查出来的id是否为null。

上一篇 Android 滑动切换Activity 下一篇 Android 获取手机及SD卡可用存储空间 Python教程

Python 教程

Python 教程

Tkinter 教程

Tkinter 教程

Pandas 教程

Pandas 教程

NumPy 教程

NumPy 教程

Flask 教程

Flask 教程

Django 教程

Django 教程

PySpark 教程

PySpark 教程

wxPython 教程

wxPython 教程

SymPy 教程

SymPy 教程

Seaborn 教程

Seaborn 教程

SciPy 教程

SciPy 教程

RxPY 教程

RxPY 教程

Pycharm 教程

Pycharm 教程

Pygame 教程

Pygame 教程

PyGTK 教程

PyGTK 教程

PyQt 教程

PyQt 教程

PyQt5 教程

PyQt5 教程

PyTorch 教程

PyTorch 教程

Matplotlib 教程

Matplotlib 教程

Web2py 教程

Web2py 教程

BeautifulSoup 教程

BeautifulSoup 教程

Java教程

Java 教程

Java 教程

Web教程

HTML 教程

HTML 教程

CSS 教程

CSS 教程

CSS3 教程

CSS3 教程

jQuery 教程

jQuery 教程

Ajax 教程

Ajax 教程

AngularJS 教程

AngularJS 教程

TypeScript 教程

TypeScript 教程

WordPress 教程

WordPress 教程

Laravel 教程

Laravel 教程

Next.js 教程

Next.js 教程

PhantomJS 教程

PhantomJS 教程

Three.js 教程

Three.js 教程

Underscore.JS 教程

Underscore.JS 教程

WebGL 教程

WebGL 教程

WebRTC 教程

WebRTC 教程

VueJS 教程

VueJS 教程

数据库教程

SQL 教程

SQL 教程

MySQL 教程

MySQL 教程

MongoDB 教程

MongoDB 教程

PostgreSQL 教程

PostgreSQL 教程

SQLite 教程

SQLite 教程

Redis 教程

Redis 教程

MariaDB 教程

MariaDB 教程

图形图像教程

Vulkan 教程

Vulkan 教程

OpenCV 教程

OpenCV 教程

大数据教程

R语言 教程

R语言 教程

开发工具教程

Git 教程

Git 教程

VSCode 教程

VSCode 教程

Docker 教程

Docker 教程

Gerrit 教程

Gerrit 教程

Excel 教程

Excel 教程

计算机教程

Go语言 教程

Go语言 教程

C++ 教程

(责任编辑:)
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:
发布者资料
查看详细资料 发送留言 加为好友 用户等级: 注册时间:2024-09-17 03:09 最后登录:2024-09-17 03:09
栏目列表
推荐内容