通信录工具类

对通信录的简单增删改查工具类:

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;

    }
}

如何拨打电话

1.增加拨打电话的权限,在manifest中修改:

<uses-permission android:name="android.permission.CALL_PHONE"/>

2.在代码中加入

Intent intent=new Intent(Intent.ACTION_CALL,Uri.parse("tel:"+phoneno));//phoneno为具体的电话号码
startActivity(intent);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值