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" /> ...
随机推荐
- Ixia测试仪的自动化
Ixia,美国Ixia公司的通信网络测试仪. 1.Ixia的自动化测试场景 测试PC(安装IxOS)AT框架-->Tcl驱动库SIG_Teq_Ixia.tcl(加载 IxTclHal库)---- ...
- sql server2008安装说明 详细完整版
SQL Server 2008是一个重大的产品版本,它推出了许多新的特性和关键的改进,使得它成为至今为止的最强大和最全面的SQL Server版本. 在现今数据的世界里,公司要获得成功和不断发展,他们 ...
- 【zZ】OpenCV HOGDescriptor 参数图解
http://blog.csdn.net/raodotcong/article/details/6239431
- Delphi JCL JEDI使用 jclDebug
开源 https://github.com/project-jedi/jcl jclDebug 下载jcl,还要下载https://github.com/project-jedi/jedi里的2个in ...
- {POJ}{3897}{Maze Stretching}{二分答案+BFS}
题意:给定迷宫,可以更改高度比,问如何使最短路等于输入数据. 思路:由于是单调的,可以用二分答案,然后BFS验证.这里用优先队列,每次压入也要进行检查(dis大小)防止数据过多,A*也可以.好久不写图 ...
- WAP端 经验记录1
1. 点击元素触发事件的先后顺序:touchstart, touchend, mousedown, mouseup, click 2. Animate 的 stop 问题问题:手机端由于用 CSS3 ...
- Qt 自定义消息窗口
用于设置取消时,询问是否保存修改的DLGvoid SetWindow::cancelButton() { if( m_IsChange) { QMessageBox msgBox; msgBox.se ...
- poj 1691 图方块 end
#include<iostream> int m,n; typedef struct node { int upx,upy; int dox,doy; int c; }node; node ...
- c/c++创建动态链接库
extern "C" C++保留了一部分过程式语言的特点,因而它可以定义不属于任何类的全局变量和函数.但是,C++毕竟是一种面向对象的程序设计语言,为了支持函数的重载,C++对全局 ...
- web之css伪类
利用伪类清楚浮动: 代码: <!DOCTYPE html> <htmllang="en"> <head> <metacharset=&qu ...