安卓聯系人簡易工具類
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;
}
}
本文由用戶 lai123 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!