Android程序如何读取手机联系人
2015-06-15 20:58
549 查看
导出手机联系人数据库,找到数据的存储结构
数据库位置: /data/data/com.android.providers.contacts/databases/contacts2.db重要的三张表:
data表 保存联系人的数据
raw_contacts表 保存联系人的id contact_id
mimetypes表 保存联系人数据的类型
查询思路
查询raw_contacts表,把联系人的id取出来根据联系人的id,查询data表,把这个id的数据取出来
根据mimetype区分数据的类型
使用内容观察者进行查询
找到手机联系人的内容提供者主机名.下载android上层应用源码,
查看packages\providers\ContactsProvider\AndroidManifest.xml:
发现主机名可以使contacts或com.android.contacts.
找到手机联系人的内容提供者表名.
查看源码packages\providers\ContactsProvider\src\com\android\providers\contacts\ContactsProvider2.java:
在URI matching在中找到对应表名.
Java代码实现.
ContentResolver resolver = this.getContentResolver(); Uri uri = Uri.parse("content://com.android.contacts/raw_contacts"); Uri uriData = Uri.parse("content://com.android.contacts/data"); Cursor cur = resolver.query(uri, new String[] { "contact_id" }, null,null, null); while (cur.moveToNext()) { String id = cur.getString(0); Log.i("I", "联系人ID:" + id); Cursor curData = resolver.query(uriData, new String[] { "data1", "mimetype" }, "raw_contact_id=?", new String[] { id }, null); while (curData.moveToNext()){ String data1 = curData.getString(0); String mime_type = curData.getString(1); if ("vnd.android.cursor.item/phone_v2".equals(mime_type)){ Log.i("I", "电话:" + data1); }else if("vnd.android.cursor.item/postal-address_v2".equals(mime_type)){ Log.i("I", "地址:" + data1); }else if ("vnd.android.cursor.item/email_v2".equals(mime_type)){ Log.i("I", "邮件:" + data1); }else if ("vnd.android.cursor.item/name".equals(mime_type)){ Log.i("I", "姓名:" + data1); } } curData.close(); } cur.close();
相关文章推荐
- Android(java)学习笔记110:ScrollView用法
- Android实现数据存储技术
- DBExecutor android 数据库框架
- Android定制ListView
- Android布局大全
- Android的五大基本组件
- android-auto-scroll-view-pager
- Macbook下Android studio删除project的方法
- Android多点触控技术
- Android: 一个两点触控的案例
- Android布局优化之Merge Include ViewStub使用与源码分析
- Android的ADB工具使用
- Android模拟器adb命令介绍
- 关于部分Android手机安装apk,无法获取正常的logo
- Macbook的android studio创建project时,加载gradle慢的解决办法
- Android数据库更新并保留原来数据的实现
- android开机动画切换
- EventBus 学习
- Android 内存监测工具 DDMS --> Heap
- Android LayoutInflater详解