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" /> ...
随机推荐
- java学习第15天(Linklist Vector)
根据集合的分类(上一天有说),首先接触的是ArrayList但是和Collection一样,他没有什么特殊的功能,直接跳过,然后是Vector. 一 Vector A:有特有功能 a:添加 pub ...
- TransactionScope类的使用
如果在C#中使用TransactionScope类(分布式事务),则须注意如下事项:1.在项目中引用using System.Transactions命名空间(先要在添加net组件的引用); 2.具体 ...
- springMVC:通配符的匹配很全面, 但无法找到元素 'mvc:annotation-driven' 的声明
转自:http://blog.csdn.net/tolcf/article/details/50845483 报错信息:通配符的匹配很全面, 但无法找到元素 'mvc:annotation-drive ...
- 21.2 Partitioning Types
分区类型: range:根据列值得一个给定的范围 list:和range相似,除了分区被选择基于的列被匹配在一个被设定为分离的值 hash 基于列组成的表达式返回的非负值 key 相似hash ,除 ...
- phpstorm之端点跟踪
如果在断点没有实时染色,首要请检查local与remote的代码文件的对应.
- json与对象转化
/// <summary> /// 把JSON字符串还原为对象 /// </summary> /// <typeparam name="T">对 ...
- 转自pnljs 委托(Func<int,bool>)
随笔- 147 文章- 0 评论- 16 Func的介绍 经常看到 Func<int, bool>...这样的写法,看到这样的就没有心思看下去了.我们学技术还是需要静下心来. 对Fu ...
- 虚拟机virtualBox设置共享文件后,linux配置
1.在/mnt下创建共享目录 mkdir /mnt/share 2.关联外部目录 mount -t vboxsf 共享文件夹名 /mnt/share/ 如:mount -t vboxsf BaiduS ...
- centos编译安装apache
1.安装工具和依赖包 yum install unzipyum -y install pcre-develyum groupinstall "Development Tools" ...
- 试一下CANVAS
// 此应用源代码如下: document.getElementById("codetext").innerHTML = document.getElementById(" ...