android 获取系统联系人 完全解析
一、代码
1.ContactsEngine.java
import java.util.ArrayList; import java.util.HashMap; import java.util.List; import android.content.ContentResolver; import android.content.Context; import android.database.Cursor; import android.net.Uri; public class ContactsEngine { /** * 获取系统联系人 * * @return */ public static List<HashMap<String, String>> getAllContacts(Context context) { List<HashMap<String, String>> list = new ArrayList<HashMap<String, String>>(); // 1.获取内容解析者 ContentResolver resolver = context.getContentResolver(); // 2.内容提供者地址 com.android.contacts 例如百度搜索jdk:www.baidu.com/jdk // raw_contacts表地址:raw_contacts veiw_data表的地址:data // 3.生成查询地址 Uri raw_uri = Uri.parse("content://com.android.contacts/raw_contacts");// http:// Uri data_uri = Uri.parse("content://com.android.contacts/data"); // 4.查询数据,先查询raw_contacts的contact_id // projection:查询的字段 Cursor cursor = resolver.query(raw_uri, new String[] { "contact_id" }, null, null, null); // 5.解析cursor while (cursor.moveToNext()) { // columnIndex : 表示字段的索引 String contact_id = cursor.getString(0); // cursor.getString(cursor.getColumnIndex("contact_id"));//getColumnIndex // : 获取字段在cursor的索引,一般用在查询字段比较多的情况 if (contact_id != null) { // 6.根据contact_id去查询veiw_data表, 报空指针异常的2种情况:null.方法、参数为空 Cursor c = resolver.query(data_uri, new String[] { "data1", "mimetype" }, "raw_contact_id=?", new String[] { contact_id }, null); HashMap<String, String> map = new HashMap<String, String>(); // 7.解析c while (c.moveToNext()) { // 获取数据 String data1 = c.getString(0); String mimetype = c.getString(1); // 8.根据mimetype判断data1的类型 if (mimetype.equals("vnd.android.cursor.item/phone_v2")) { // 电话 // 9.保存数据 map.put("phone", data1); } else if (mimetype.equals("vnd.android.cursor.item/name")) { // 姓名 map.put("name", data1); } } // 10.添加到集合中 list.add(map); // 11.关闭cursor c.close(); } } cursor.close(); return list; } }
2.需要添加权限
<uses-permission android:name="android.permission.READ_CONTACTS"/>
二、单元测试
1.业务类都要进行单元测试,实际项目开发采用创建Android Test Project,创建测试类TestContacts
TestContacts.java
import java.util.HashMap; import java.util.List; import com.demo.engine.ContactsEngine; import android.test.AndroidTestCase; public class TestContacts extends AndroidTestCase { public void testContacts(){ List<HashMap<String, String>> list = ContactsEngine.getAllContacts(getContext()); for (HashMap<String, String> hashMap : list) { System.out.println("姓名:"+hashMap.get("name")+" 电话:"+hashMap.get("phone")); } } }
android 获取系统联系人 完全解析的更多相关文章
- android获取系统通讯录
package com.example.administrator.yunphone.View; import android.app.Fragment; import android.databas ...
- Android获取系统时间方法的总结
Android获取系统时间方法的方法有很多种,常用的有Calendar.Date.currentTimeMills等方法. (1)Calendar Calendar获取系统时间首先要用Calendar ...
- Android 获取系统时间和网络时间
有些时候我们的应用中只能使用网络时间,而不能使用系统的时间,这是为了避免用户关闭了使用网络时间的功能后所产生的误差. 直接上代码. 1.清单文件中网络添加权限. <!-- 访问Internet资 ...
- Android 获取系统的联系人
本文主要介绍android中怎样获取系统的联系人数据 首先打开模拟器 点击联系人图标按钮 说明系统联系人数据库是空的,打开File explorer,找到data/data下面的文件夹: 将conta ...
- [android] 获取系统的联系人信息
内容提供是实质上是个接口,后门,他给别人提供数据,系统联系人是个比较复杂的内容通过者. 找到/data/data/com.android.providers.contacts/contacts2.db ...
- Android 获取系统短信内容
//这里通过内容提供者获取系统短信内容 Uri uri = Uri.parse("content://sms/"); String[] projection = {"_i ...
- Android 获取系统或SDCARD剩余空间信息(转)
android.os下的StatFs类主要用来获取文件系统的状态,能够获取sd卡的大小和剩余空间,获取系统内部空间也就是/system的大小和剩余空间等等. 看下读取sd卡的:Java代码 ...
- Android 获取系统图库和相机照片 裁剪并显示
接上一篇 package com.example.image; import android.app.Activity; import android.content.Intent; import a ...
- android 获取系统硬件信息
一,首先设置权限访问: <uses-permission android:name="android.permission.READ_PHONE_STATE" /> ...
随机推荐
- Mysql 第一天
数据库课程体系 在PHP阶段,将数据库分为三个阶段: 基础阶段(就业班第一个阶段): 6天, mysql数据库的基本操作(增删改查), 以及一些高级操作(视图, 触发器,函数,存储过程等), 和PHP ...
- html大牛属性
<META http-equiv="Content-Type" content="text/htmll;charset=gb2312"> 字体 &l ...
- 设置MYECLIPSE的自动补全
http://jingyan.baidu.com/article/d169e1869caf1e436611d8db.html
- cmd中用PING命令时,出现'Ping' 不是内部或外部命令 解决方案
在cmd中用PING命令时,出现'Ping' 不是内部或外部命令,也不是可运行的程序或批处理文件.先了解一下内容:1.可执行文件.命令文件和批处理文件以.exe或者.com或者.bat为扩展名的文件分 ...
- caj转pdf
1,准备工具 福昕阅读器 CAJViewer 2: CAJViewer打开caj文件,选项打印,选择福昕阅读器打印机,开始. 3:等待结束即可 提示:打印时间可能会稍长 请勿乱操作
- JavaScript编程总结
1. JS加载放在底部 2. JS和CSS合并,一个页面加载的JS和CSS越少越好 3. 尽量使用变量,页非全局变量. 4. 脚本和DOM交互越少越好,尽量批量修改. 5. 批量修 ...
- mysql 用source 导入数据库报错
平时一直使用phpmyadmin或mysqldum进行导出,使用source命令导入数据库. 但换了新版本mysql后,上述导入方法出现以下错误: ERROR: Unknown command '\\ ...
- hdu5834
题目让求得是从任意一点出发可以不回来得到的最大的价值 这应该不算特别水的树形dp了,它不止要从上往下dfs,后来海要重新dfs,根据父亲节点更新儿子节点,算是正常的树形dp中比较简单的吧. 思路: 先 ...
- thinkphp学习简易教程(一) thinkphp创建项目
1.在本地服务器根目录下创建项目目录,如命名为app: 2.把thinkphp的压缩包解压到与项目同级目录下,如app是放在目录APP下面,即项目目录路径为'APP/app/',则thinkphp应解 ...
- ListView下拉刷新
本内容为复制代码: 一.自定义ListView控件: package com.xczl.smart.view; import java.util.Date; import com.suliang.R; ...