安卓联系人简易工具类详解编程语言

ContactUtils.java 

package com.chen.utils; 
 
import java.util.ArrayList; 
import java.util.HashMap; 
import java.util.List; 
import java.util.Map; 
 
import android.content.ContentResolver; 
import android.content.ContentUris; 
import android.content.ContentValues; 
import android.database.Cursor; 
import android.net.Uri; 
 
/** 
 * 联系人操作工具类,提供姓名,手机,邮箱的增删改查操作 
 * 如果某一项数据 例如,同一联系人存在多条手机号 , 此类此类只能显示和操作其中的第一条数据 
 * 其中操作格式为id,name,phone,email; 
 *  
 * @author chenj_000 
 *  
 */ 
public class ContactUtils { 
	/** 
	 * raw_contacts表 
	 */ 
	public static Uri RAW_CONTACTS = Uri 
			.parse("content://com.android.contacts/raw_contacts"); 
	/** 
	 * data表 
	 */ 
	public static Uri DATA = Uri.parse("content://com.android.contacts/data"); 
	public static final int TYPE_PHONE = 5, TYPE_NAME = 7, TYPE_EMAIL = 1; 
	public static final String[] MIMETYPE = { "", 
			"vnd.android.cursor.item/email_v2", "vnd.android.cursor.item/im", 
			"vnd.android.cursor.item/nickname", 
			"vnd.android.cursor.item/organization", 
			"vnd.android.cursor.item/phone_v2", 
			"vnd.android.cursor.item/sip_address", 
			"vnd.android.cursor.item/name", 
			"vnd.android.cursor.item/postal-address_v2", 
			"vnd.android.cursor.item/identity", 
			"vnd.android.cursor.item/photo", 
			"vnd.android.cursor.item/group_membership" }; 
	private static final String CONDITION = "raw_contact_id=? and mimetype_id=?"; 
 
	/** 
	 * 查询所有联系人信息 
	 *  
	 * @return 以list形式返回存放联系人信息的map集合,其中包括的键有id,name,phone,email 
	 */ 
	public static List<Map<String, String>> query(ContentResolver resolver) { 
		List<Map<String, String>> datas = new ArrayList<Map<String, String>>(); 
		Cursor cursor = resolver.query(RAW_CONTACTS, null, null, null, null); 
		HashMap<String, String> map; 
		while (cursor.moveToNext()) { 
			map = new HashMap<String, String>(); 
			map.put("id", getString(cursor, "_id")); 
			map.put("name", getString(cursor, "display_name")); 
			map.put("phone", 
					getString(getCursor(map.get("id"), TYPE_PHONE, resolver), 
							"data1")); 
			map.put("email", 
					getString(getCursor(map.get("id"), TYPE_EMAIL, resolver), 
							"data1")); 
			datas.add(map); 
		} 
		return datas; 
	} 
 
	/** 
	 * 从当前Cursor中找出列名为columnName的字段 
	 *  
	 * @param c 
	 *            数据源 
	 * @param columnName 
	 *            列名 
	 * @return 列中的数据,数据源为空时返回结果为null 
	 */ 
	private static String getString(Cursor c, String columnName) { 
		if (c == null) { 
			return null; 
		} 
		return c.getString(c.getColumnIndex(columnName)); 
	} 
 
	/** 
	 * 删除联系人 
	 *  
	 * @param resolver 
	 * @param id 
	 * @return 删除是否成功 
	 */ 
	public static boolean delete(ContentResolver resolver, String id) { 
		if (resolver.delete(RAW_CONTACTS, "_id=" + id, null) > 0) { 
			return true; 
		} 
		return false; 
	} 
 
	/** 
	 * 更新联系人信息,联系人不存在时返回null 
	 *  
	 * @param resolver 
	 * @param id 
	 *            raw_contact_id 
	 * @param name 
	 * @param phone 
	 * @param email 
	 */ 
	public static boolean update(ContentResolver resolver, String id, 
			String name, String phone, String email) { 
		ContentValues values = new ContentValues(); 
 
		// 更新raw_contact表中的姓名 
		values = new ContentValues(); 
		values.put("display_name", name); 
		if (resolver.update(RAW_CONTACTS, values, "_id=" + id, null) == 0) 
			// 当前不存在此数据 
			return false; 
 
		/* 
		 * 更新data表中的姓名 
		 */ 
		resolver.update(DATA, getDataValues(name, name), CONDITION, 
				new String[] { id, "" + TYPE_NAME }); 
 
		/* 
		 * 更新data表手机号码 
		 */ 
		if (resolver.update(DATA, getDataValues(phone, "2"), CONDITION, 
				new String[] { id, "" + TYPE_PHONE }) == 0) { 
			// 当前联系人号码为空,插入号码 
			resolver.insert(DATA, 
					getDataValues(id, MIMETYPE[TYPE_PHONE], phone)); 
		} 
 
		/* 
		 * 更新data表邮箱 
		 */ 
		if (resolver.update(DATA, getDataValues(email, "1"), CONDITION, 
				new String[] { id, "" + TYPE_EMAIL }) == 0) { 
			// 当前邮箱不存在,插入邮箱 
			resolver.insert(DATA, 
					getDataValues(id, MIMETYPE[TYPE_EMAIL], email)); 
		} 
		return true; 
	} 
 
	/** 
	 * 用于更新数据时包装数据对象 
	 *  
	 * @param data1 
	 * @param data2 
	 * @return 
	 */ 
	private static ContentValues getDataValues(String data1, String data2) { 
		ContentValues values = new ContentValues(); 
		values.put("data1", data1); 
		values.put("data2", data2); 
		return values; 
	} 
 
	/** 
	 * 插入联系人信息 
	 *  
	 * @param resolver 
	 * @param name 
	 * @param phone 
	 * @param email 
	 */ 
	public static void insert(ContentResolver resolver, String name, 
			String phone, String email) { 
		// 向raw_contact表中插入一条空数据,并获得一个id 
		String id = "" 
				+ ContentUris.parseId(resolver.insert(RAW_CONTACTS, 
						new ContentValues())); 
 
		// 向data表插入邮箱 
		resolver.insert(DATA, getDataValues(id, MIMETYPE[TYPE_EMAIL], email)); 
		// 向data表插入手机号码 
		resolver.insert(DATA, getDataValues(id, MIMETYPE[TYPE_PHONE], phone)); 
		// 向data表插入姓名 
		resolver.insert(DATA, getDataValues(id, MIMETYPE[TYPE_NAME], name)); 
	} 
 
	/** 
	 * 将数据包装为ContentValues对象 
	 *  
	 * @param id 
	 *            raw_contact_id 
	 * @param mimetype 
	 * @param data1 
	 * @return 
	 */ 
	private static ContentValues getDataValues(String id, String mimetype, 
			String data1) { 
		ContentValues values = new ContentValues(); 
		values.put("raw_contact_id", id); 
		values.put("mimetype", mimetype); 
		values.put("data1", data1); 
		return values; 
	} 
 
	/** 
	 * 在data表中查询符合raw_contact_id,mimetype_id的第一条数据,数据不存在时返回null 
	 *  
	 * @param raw_contact_id 
	 * @param mimetype_id 
	 * @return 
	 */ 
	private static Cursor getCursor(String raw_contact_id, int mimetype_id, 
			ContentResolver resolver) { 
		Cursor c = resolver.query(DATA, null, CONDITION, new String[] { 
				raw_contact_id, "" + mimetype_id }, null); 
		if (c.moveToNext()) 
			return c; 
		return null; 
 
	} 
} 

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/10127.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论