安卓聯系人簡易工具類

lai123 9年前發布 | 2K 次閱讀 Java

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