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 教程
Tkinter 教程
Pandas 教程
NumPy 教程
Flask 教程
Django 教程
PySpark 教程
wxPython 教程
SymPy 教程
Seaborn 教程
SciPy 教程
RxPY 教程
Pycharm 教程
Pygame 教程
PyGTK 教程
PyQt 教程
PyQt5 教程
PyTorch 教程
Matplotlib 教程
Web2py 教程
BeautifulSoup 教程
Java教程
Java 教程
Web教程
HTML 教程
CSS 教程
CSS3 教程
jQuery 教程
Ajax 教程
AngularJS 教程
TypeScript 教程
WordPress 教程
Laravel 教程
Next.js 教程
PhantomJS 教程
Three.js 教程
Underscore.JS 教程
WebGL 教程
WebRTC 教程
VueJS 教程
数据库教程
SQL 教程
MySQL 教程
MongoDB 教程
PostgreSQL 教程
SQLite 教程
Redis 教程
MariaDB 教程
图形图像教程
Vulkan 教程
OpenCV 教程
大数据教程
R语言 教程
开发工具教程
Git 教程
VSCode 教程
Docker 教程
Gerrit 教程
Excel 教程
计算机教程
Go语言 教程
(责任编辑:)
|