【Android】Android获取系统联系人

来源:互联网 发布:亚像素边缘定位 算法 编辑:程序博客网 时间:2024/05/22 10:26

一、代码

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.解析cursorwhile (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.解析cwhile (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.关闭cursorc.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"));}}}


1 0
原创粉丝点击