`
huiji232
  • 浏览: 11830 次
社区版块
存档分类
最新评论

通讯录工具类ContactsHelper

阅读更多
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;

public class ContactsHelper {
	private static String uri_rawcontacts = "content://com.android.contacts/raw_contacts";
	private static String uri_contacts_phones = "content://com.android.contacts/data/phones";
	private static String uri_contacts_emails = "content://com.android.contacts/data/emails";
	private static String uri_contacts_data = "content://com.android.contacts/data";

	// 查询联系人的信息
	public static List<Map<String, Object>> selectContactsInfo(
			ContentResolver resolver) {
		List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
		Cursor contactsCursor = resolver.query(Uri.parse(uri_rawcontacts),
				new String[] { "_id", "display_name" }, null, null, null);
		while (contactsCursor.moveToNext()) {
			Map<String, Object> map = new HashMap<String, Object>();
			int contactsId = contactsCursor.getInt(contactsCursor
					.getColumnIndex("_id"));
			String displayName = contactsCursor.getString(contactsCursor
					.getColumnIndex("display_name"));
			map.put("_id", contactsId);
			map.put("display_name", displayName);

			// 根据联系人的id去data表获取电话号码的信息
			Cursor phoneCursor = resolver.query(Uri.parse(uri_contacts_phones),
					new String[] { "raw_contact_id", "data1" },
					"raw_contact_id=?", new String[] { contactsId + "" }, null);

			StringBuilder sb = new StringBuilder();
			while (phoneCursor.moveToNext()) {
				sb.append(phoneCursor.getString(1));
				sb.append("|");
			}
			map.put("phones", sb.toString());

			// 根据联系人的id去data表获取email的信息
			Cursor emailCursor = resolver.query(Uri.parse(uri_contacts_emails),
					new String[] { "raw_contact_id", "data1" },
					"raw_contact_id=?", new String[] { contactsId + "" }, null);

			StringBuilder sb2 = new StringBuilder();
			while (emailCursor.moveToNext()) {
				sb2.append(emailCursor.getString(1));
				sb2.append("|");
			}
			map.put("emails", sb2.toString());

			list.add(map);
		}
		return list;
	}

	// 修改联系人的姓名
	public static boolean updateContactsName(ContentResolver resolver,
			Map<String, Object> map, String id) {
		ContentValues values = new ContentValues();
		// 更改raw_contacts表中的姓名
		values.put("display_name", map.get("display_name").toString());
		values.put("display_name_alt", map.get("display_name").toString());
		values.put("sort_key", map.get("display_name").toString());
		values.put("sort_key_alt", map.get("display_name").toString());
		int result1 = resolver.update(Uri.parse(uri_rawcontacts), values,
				"_id=?", new String[] { id });
		// 更改data表中的姓名
		values.clear();
		values.put("data1", map.get("display_name").toString());
		values.put("data2", map.get("display_name").toString());
		int result2 = resolver.update(Uri.parse(uri_contacts_data), values,
				"raw_contact_id=? and mimetype_id=?", new String[] { id, "7" });
		// 更改data表中的phone
		values.clear();
		values.put("data1", map.get("phones").toString());
		values.put("data2", 2);
		int result3 = resolver.update(Uri.parse(uri_contacts_data), values,
				"raw_contact_id=? and mimetype_id=?", new String[] { id, "5" });
		// 更改data表中的phone
		values.clear();
		values.put("data1", map.get("emails").toString());
		values.put("data2", 1);
		int result4 = resolver.update(Uri.parse(uri_contacts_data), values,
				"raw_contact_id=? and mimetype_id=?", new String[] { id, "1" });

		// 更改data表中的email
		if (result1 > 0 && result2 > 0 && result3 > 0 && result4 > 0) {
			return true;
		} else {
			return false;
		}
	}

	// 删除联系人信息
	public static boolean deleteContactByName(ContentResolver resolver,
			String displayName) {
		int data = resolver.delete(Uri.parse(uri_rawcontacts),
				"display_name=?", new String[] { displayName });
		if (data > 0) {
			return true;
		}
		return false;
	}

	// 删除联系人信息
	public static boolean deleteContactById(ContentResolver resolver, String id) {
		int data = resolver.delete(Uri.parse(uri_rawcontacts), "_id=?",
				new String[] { id });
		if (data > 0) {
			return true;
		}
		return false;
	}

	// 新增数据
	public static void insertContact(ContentResolver resolver,
			Map<String, Object> map) {
		ContentValues values = new ContentValues();
		// 往raw_contacts表中插入一条空数据,目的是获取联系人的id
		Uri newUri = resolver.insert(Uri.parse(uri_rawcontacts), values);
		long id = ContentUris.parseId(newUri);

		// 往data表中插入联系人姓名的数据
		values.put("raw_contact_id", id);
		values.put("mimetype", "vnd.android.cursor.item/name");
		values.put("data1", map.get("display_name").toString());
		values.put("data2", map.get("display_name").toString());
		resolver.insert(Uri.parse(uri_contacts_data), values);

		// 往data表中插入联系人的电话信息
		values.clear();
		values.put("raw_contact_id", id);
		values.put("mimetype", "vnd.android.cursor.item/phone_v2");
		values.put("data1", map.get("phones").toString());
		values.put("data2", 2);
		resolver.insert(Uri.parse(uri_contacts_data), values);

		// 往data表中插入联系人的email
		values.clear();
		values.put("raw_contact_id", id);
		values.put("mimetype", "vnd.android.cursor.item/email_v2");
		values.put("data1", map.get("emails").toString());
		values.put("data2", 1);
		resolver.insert(Uri.parse(uri_contacts_data), values);

	}

}
分享到:
评论

相关推荐

    Android导入导出txt通讯录工具.zip

    这个"Android导入导出txt通讯录工具"是一个实用的应用项目,它提供了解决这个问题的源代码。这个工具允许用户将他们的联系人数据导入到Android设备中,或者将设备上的联系人导出为纯文本(TXT)格式,便于备份或在...

    Android导入txt通讯录工具

    Android导入txt通讯录工具 具体使用方法见http://blog.csdn.net/zyc13701469860/article/details/7217836

    OUTLOOK全球通讯录导出工具

    通常,这类工具会提供直观的界面,允许用户选择要导出的通讯录范围,包括特定的联系人组或者全部联系人,并支持多种常见的数据格式,如CSV、VCF等,便于在其他应用或系统中导入。 AddressMagic.exe很可能是这个工具...

    Android导入导出txt通讯录工具(源码)

    为了帮助开发者实现这一功能,存在一个名为"Android导入导出txt通讯录工具"的源码项目。这个工具允许用户将Android设备上的通讯录导出为TXT格式的文件,同时也支持从TXT文件导入联系人到设备的通讯录。下面将详细...

    android 调用系统联系人列表工具类

    android 调用系统联系人列表工具类,两种方式进行处理。

    类,集合通讯录

    winfrom窗体通讯录 ,用到类对象 属性 集合

    个人通讯录----个人工具类

    【个人通讯录----个人工具类】是一个典型的个人信息管理应用,旨在帮助用户记录和管理他们的联系人信息。这个实例结合了编程技术与数据库管理,主要使用了Visual Studio 2005 (VS2005) 和C++编程语言,同时涉及到SQL...

    安卓通讯录联系人打电话归属地相关-Android导入导出txt通讯录工具.rar

    在提供的压缩包"Android导入导出txt通讯录工具"中,可能包含了一些源代码或者应用程序,帮助用户实现这些功能。 首先,我们来了解一下Android系统的通讯录管理。Android提供了丰富的API供开发者使用,以便于创建...

    iOS实现封装一个获取通讯录的工具类详解

    iOS实现封装一个获取通讯录的工具类详解 iOS实现封装一个获取通讯录的工具类详解是指在iOS平台上封装一个工具类,用于获取通讯录信息。该工具类主要使用了AddressBook、AddressBookUI、Contacts和ContactsUI四个...

    通讯录工具

    《通讯录工具——基于Delphi的实现与源码解析》 在信息技术日益发达的今天,通讯录工具已经成为了我们日常生活和工作中不可或缺的一部分。它能够帮助我们有效地管理个人和职业关系,方便查找和联系相关人员。本篇...

    Outlook 通讯录修改工具

    Outlook 通讯录修改工具是一款专门设计用于Microsoft Office 2003和2007的实用程序,它旨在帮助用户更轻松、高效地管理和编辑他们的Outlook联系人(也称为Global Address List,GAL)。在企业环境中,GAL通常包含...

    长虹008系统手机通讯录工具V1.0

    献给所有喜欢长虹长待机的朋友们 如果要说手机待机时间最长非长虹莫属,008手机达到了顶峰...有时间再做一个通用的手机通讯录工具。本工具在008-3大悍马通过,大家有什么问题可邮:sportboy@tom.com . 2014.10.19

    基于node 写的通讯录工具.zip

    基于node 写的通讯录工具.zip

    个人通讯录设计

    个人通讯录设计个人通讯录设计个人通讯录设计个人通讯录设计个人通讯录设计个人通讯录设计个人通讯录设计个人通讯录设计个人通讯录设计个人通讯录设计个人通讯录设计个人通讯录设计个人通讯录设计个人通讯录设计个人...

    毕业设计-使用node写的通讯录工具.zip

    这是一个基于Node.js开发的毕业设计项目,主要目标是构建一个通讯录工具。通过这个项目,我们可以深入了解Node.js在实际应用中的技术栈以及如何利用它来创建一个实用的Web应用程序。 Node.js是一个开源、跨平台的...

    毕业设计参考:使用 node.js 写的通讯录工具

    毕业设计的主题是创建一个使用 Node.js 编写的通讯录工具。这个工具可以用于存储、管理和检索联系人信息。以下是一个简单的项目概述,您可以根据自己的需求进行修改和扩展。 1. 项目名称:Node.js 通讯录工具 2. ...

    C++个人通讯录设计

    《C++个人通讯录设计》 C++个人通讯录设计是一项常见的编程课程设计任务,它旨在帮助初学者更好地理解和运用C++语言,同时培养实际问题解决能力。在这个项目中,学生将利用C++的基本语法、类和对象的概念,以及文件...

    邮箱通讯录转换工具

    《邮箱通讯录转换工具——实现跨邮箱通讯录的无缝迁移》 在数字化时代,电子邮件已成为人们日常生活和工作中不可或缺的通信工具。然而,不同邮箱服务提供商的通讯录格式各异,这给用户在更换邮箱或者合并通讯录时...

Global site tag (gtag.js) - Google Analytics