Android 使用ContentProvider(内容提供者)查询手机联系
2015-07-17 12:45
856 查看
在开发应用程序过程中有时候会关联到用户的手机联系人,在Android的为开发者提供了ContentProvider内容提供者来获取手机的联系人,首先我在模拟器中保存了两个联系人如下所示:
通过Eclipse导出电话本的数据库使用SQLite EXpert打开得到数据库,可以看到里面有很多表格。
在这些表格中保存联系认的表格是raw_contact和data表格,分别打开这两个表格,可以看到,保存在手机里面的两个联系人
所以只需要在程序中查找这两张表就可以获得联系人的姓名了电话。
在程序中:
1、首先得到ContentProvider提供的内容提供器
2、获得需要查询的表的URI
最后将数据显示在Listview中
源代码下载:查询联系人
lisi:电话:1201 zhangsan:电话:1110
通过Eclipse导出电话本的数据库使用SQLite EXpert打开得到数据库,可以看到里面有很多表格。
在这些表格中保存联系认的表格是raw_contact和data表格,分别打开这两个表格,可以看到,保存在手机里面的两个联系人
所以只需要在程序中查找这两张表就可以获得联系人的姓名了电话。
在程序中:
1、首先得到ContentProvider提供的内容提供器
2、获得需要查询的表的URI
// 1 得到一个内容解析器 ContentResolver resolver = getContentResolver(); // 2 获得要查询的表的uri // 只需要这两张表 Uri uri = Uri.parse("content://com.android.contacts/raw_contacts"); Uri dataUri = Uri.parse("content://com.android.contacts/data查询raw_contacts表格中联系人的contact_id
Cursor cursor = resolver.query(uri, new String[]{"contact_id"}, null, null, null);然后再通过得到的contact_id查询data表格中的data1和mimetype的信息,
<span style="white-space:pre"> </span>while (cursor.moveToNext()) { String contact_id = cursor.getString(0); if (contact_id != null) { Cursor dataCursor = resolver.query(dataUri, new String[]{"data1","mimetype"}, "contact_id=?", new String[]{contact_id}, null); while(dataCursor.moveToNext()){ String data1 = dataCursor.getString(0); String mimetype = dataCursor.getString(1); System.out.println("data1----" + data1 + "---mimetype---" + mimetype);打印出得到的data1和mimetype信息,
data1----1110---mimetype---vnd.android.cursor.item/phone_v2 data1----Zhangsan---mimetype---vnd.android.cursor.item/name data1----1 201---mimetype---vnd.android.cursor.item/phone_v2 data1----Lisi---mimetype---vnd.android.cursor.item/name通过上面的信息可知。当mimetype为vnd.android.cursor.item/phone_v2时,data1的值就是电话号码。当mimetype为vnd.android.cursor.item/name时,data1的值就是联系人姓名。并存在map中。
<span style="white-space:pre"> </span>if ("vnd.android.cursor.item/phone_v2".equals(mimetype)) { map.put("phone", data1); }else if ("vnd.android.cursor.item/name".equals(mimetype)) { map.put("name", data1); }
最后将数据显示在Listview中
List<Map<String, String>> data = getSystemContact(); SimpleAdapter adapter = new SimpleAdapter(this, data, R.layout.item_contact, new String[]{"name","phone"}, new int[]{R.id.name,R.id.phone}); select_contact.setAdapter(adapter);最后的结果如下图:
源代码下载:查询联系人
相关文章推荐
- Android 仿余额宝数字动画实现
- Android应用经典主界面框架之二:仿网易新闻客户端、CSDN 客户端 (Fragment ViewPager)
- 【Android】Android客户端以线程的方式从服务器的PHP读取Mysql
- 开始_android的_第一个应用(Hello World)(一)
- Android学习3——Activity生命周期
- 今天“农村打工仔”带你们走入Android的世界
- Android 实现分享功能的方法
- Android 实现分享功能的方法 分类: Android 2015-07-17 12:07 4人阅读 评论(0) 收藏
- Android常见异常解决方法
- Unable to execute dex: Multiple dex files define 解决方法 分类: Android 2015-07-17 12:06 4人阅读 评论(0) 收藏
- Android布局中Layout_weight的属性
- android gradient 使用小记
- Android Fragment的生命周期
- Toolbar的高级使用
- 【Android Studio探索之路系列】之一:Android Studio开篇
- Android高德地图开发 地图事件
- 在Android中显示GIF动画
- Android如何使用API
- Android 使用ptrace查看其它进程的内存数据
- Android新的漏洞的应用程序中的发现!