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" /> ...
随机推荐
- 巧用vsprintf将浮点数等转化字符串
直接上代码 #include <stdarg.h> ]; int vspf(char *fmt, ...) { va_list argptr; int cnt; va_start(argp ...
- CocoaPods安装及使用《转》
http://www.cnblogs.com/eagley/p/5407721.html
- Tomcat和JavaWeb笔记
<iframe src="http://www.xmind.net/embed/XFXh" width="900px" height="540p ...
- remote debug in visual studio
install "rtools setup x64"[remote debugging monitor] on the target machine, lauch it when ...
- 构建Maven聚合工程
最近,准备构建一个Maven的项目,基于模块化的结构思想,决定使用Maven的聚合工程进行构建. 环境准备: (1)eclipse 这里推荐使用spring封装的eclipse(即STS) ,STS中 ...
- 【网络编程/C++】修改本机ip地址
昨天学会了编程实现获取本地网卡信息,今天再接再砺学会了修改本机ip地址.其实原理很简单就是用c++调用一下dos命令而已,不得不说,dos命令实在是太强大了,当然听说还有种修改注册表的方法,不过没有试 ...
- Storm-隔离调度器
这个版本的亮点是新的“隔离调度器”,使得在一些拓扑中分享集群变得简单和安全.隔离调度程序允许您指定哪些拓扑应该“孤立”, 这意味着它们运行在集群中的一组专用的机器,没有其他的拓扑将运行.这些孤立的拓扑 ...
- 在Action 中访问web资源
1.什么是web资源: HttpServletRequest,HttpSession,ServletContext等原生的Servlet API. 2.为什么要访问web资源? B/S应用的Contr ...
- 简单C语言文法
<程序>→<外部声明>|<程序><外部声明> <外部声明>→<函数定义>|<声明> <函数定义>→< ...
- Spark 读取HBase和SolrCloud数据
Spark1.6.2读取SolrCloud 5.5.1 //httpmime-4.4.1.jar // solr-solrj-5.5.1.jar //spark-solr-2.2.2-20161007 ...