文档章节

android中添加通过内容提供者添加联系人

ht896632
 ht896632
发布于 2016/03/02 14:07
字数 586
阅读 38
收藏 0

「深度学习福利」大神带你进阶工程师,立即查看>>>

import java.util.ArrayList;

import android.content.ContentProviderOperation;
import android.content.ContentResolver;
import android.content.ContentUris;
import android.content.ContentValues;
import android.database.Cursor;
import android.net.Uri;
import android.test.AndroidTestCase;
import android.util.Log;

public class ContastsTest extends AndroidTestCase {
	private static final String TAG = "ContastsTest";
	/**
	 * 查询手机联系人信息包括:姓名、电话、邮件
	 */
	public void testContacts() throws Exception {
		Uri uri = Uri.parse("content://com.android.contacts/contacts");
		ContentResolver resolver = getContext().getContentResolver();
		Cursor cursor = resolver.query(uri, new String[] { "_id" }, null, null,
				null);
		while (cursor.moveToNext()) {
			int contactid = cursor.getInt(0);
			StringBuilder sb = new StringBuilder();
			sb.append("contactid=" + contactid);

			uri = Uri.parse("content://com.android.contacts/contacts/"
					+ contactid + "/data");
			Cursor datacursor = resolver.query(uri, new String[] { "mimetype",
					"data1", "data2" }, null, null, null);
			while (datacursor.moveToNext()) {
				String data = datacursor.getString(datacursor
						.getColumnIndex("data1"));
				String mimetypetype = datacursor.getString(datacursor
						.getColumnIndex("mimetype"));
				// 判断数据类型name:表示是姓名;email_v2:表示是email邮件;phone_v2:表示是电话
				if ("vnd.android.cursor.item/name".equals(mimetypetype)) {
					sb.append("name=" + data);
				} else if ("vnd.android.cursor.item/email_v2"
						.equals(mimetypetype)) {
					sb.append("email=" + data);
				} else if ("vnd.android.cursor.item/phone_v2"
						.equals(mimetypetype)) {
					sb.append("phone=" + data);
				}
			}
			Log.i(TAG, sb.toString());
		}
	}

	/**
	 * 根据手机号码获取联系人的姓名
	 */
	public void testContactsNameByNumber() throws Exception {
		String number = "15021868030";
		Uri uri = Uri
				.parse("content://com.android.contacts/data/phones/filter/"
						+ number);
		ContentResolver resolver = this.getContext().getContentResolver();
		Cursor cursor = resolver.query(uri, new String[] { "display_name" },
				null, null, null);
		if (cursor.moveToNext()) {
			String name = cursor.getString(0);
			Log.i(TAG, name);
		}
		cursor.close();
	}

	/**
	 * 添加联系人
	 */
	public void testAddContacts() throws Exception {
		Uri uri = Uri.parse("content://com.android.contacts/raw_contacts");
		ContentResolver resolver = this.getContext().getContentResolver();
		ContentValues values = new ContentValues();
		long contactid = ContentUris.parseId(resolver.insert(uri, values));
		// 添加姓名
		uri = Uri.parse("content://com.android.contacts/data");
		values.put("raw_contact_id", contactid);
		values.put("mimetype", "vnd.android.cursor.item/name");
		values.put("data2", "李宏涛");
		resolver.insert(uri, values);
		// 添加电话
		values.clear();
		values.put("raw_contact_id", contactid);
		values.put("mimetype", "vnd.android.cursor.item/phone_v2");
		values.put("data2", "2");// 区分座机和手机类型
		values.put("data1", "15021868030");
		resolver.insert(uri, values);
		// 添加EMAIL
		values.clear();
		values.put("raw_contact_id", contactid);
		values.put("mimetype", "vnd.android.cursor.item/email_v2");
		values.put("data2", "2");// 2:表示单位email
		values.put("data1", "ht896632@msn.com");
		resolver.insert(uri, values);
	}

	/**
	 * 在同一个事务中完成联系人各项的操作
	 */
	public void testAddContact2() throws Exception {
		Uri uri = Uri.parse("content://com.android.contacts/raw_contacts");
		ContentResolver resolver = this.getContext().getContentResolver();
		ArrayList<ContentProviderOperation> operations = new ArrayList<ContentProviderOperation>();

		ContentProviderOperation cpo1 = ContentProviderOperation.newInsert(uri)
				.withValue("account_name", null).build();// 存放谷歌的登录账号
		operations.add(cpo1);
		// 添加姓名
		uri = Uri.parse("content://com.android.contacts/data");
		ContentProviderOperation cpo2 = ContentProviderOperation.newInsert(uri)
				.withValueBackReference("raw_contact_id", 0)
				// 使用第一条记录添加完后返回的ID做为这条记录的值
				.withValue("mimetype", "vnd.android.cursor.item/name")
				.withValue("data2", "卡卡").build();
		operations.add(cpo2);

		// 添加电话
		ContentProviderOperation cpo3 = ContentProviderOperation
				.newInsert(uri)
				.withValueBackReference("raw_contact_id", 0)
				// 使用第一条记录添加完后返回的ID做为这条记录的值
				.withValue("mimetype", "vnd.android.cursor.item/phone_v2")
				.withValue("data2", "2").withValue("data1", "15021868030")
				.build();
		operations.add(cpo3);

		// 添加EMAIL
		ContentProviderOperation cpo4 = ContentProviderOperation
				.newInsert(uri)
				.withValueBackReference("raw_contact_id", 0)
				// 使用第一条记录添加完后返回的ID做为这条记录的值
				.withValue("mimetype", "vnd.android.cursor.item/email_v2")
				.withValue("data2", "2").withValue("data1", "ht896632@msn.com")
				.build();
		operations.add(cpo4);

		resolver.applyBatch("com.android.contacts", operations);
	}
}

注:添加联系人需要在项目清单中加入权限:  

<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.WRITE_CONTACTS" />
ht896632
粉丝 37
博文 53
码字总数 31361
作品 0
闵行
高级程序员
私信 提问
加载中
请先登录后再评论。
Netty那点事(三)Channel与Pipeline

Channel是理解和使用Netty的核心。Channel的涉及内容较多,这里我使用由浅入深的介绍方法。在这篇文章中,我们主要介绍Channel部分中Pipeline实现机制。为了避免枯燥,借用一下《盗梦空间》的...

黄亿华
2013/11/24
2W
22
浅入浅出Android(003):使用TextView类构造文本控件

基础: TextView是无法供编辑的。 当我们新建一个项目MyTextView时候,默认的布局(/res/layout/activity_main.xml)中已经有了一个TextView: <TextView 运行效果如下: 修改其文本内容...

樂天
2014/03/22
683
1
我的架构演化笔记 功能1: 基本的用户注册

“咚咚”,一阵急促的敲门声, 我从睡梦中惊醒,我靠,这才几点,谁这么早, 开门一看,原来我的小表弟放暑假了,来南京玩,顺便说跟我后面学习一个网站是怎么做出来的。 于是有了下面的一段...

强子哥哥
2014/05/31
976
3
beego API开发以及自动化文档

beego API开发以及自动化文档 beego1.3版本已经在上个星期发布了,但是还是有很多人不了解如何来进行开发,也是在一步一步的测试中开发,期间QQ群里面很多人都问我如何开发,我的业余时间实在...

astaxie
2014/06/25
2.7W
22
树莓派(Raspberry Pi):完美的家用服务器

自从树莓派发布后,所有在互联网上的网站为此激动人心的设备提供了很多有趣和具有挑战性的使用方法。虽然这些想法都很棒,但树莓派( RPi )最明显却又是最不吸引人的用处是:创建你的完美家用...

异次元
2013/11/09
7.1K
8

没有更多内容

加载失败,请刷新页面

加载更多

程序员职场:拥有一个学位将会在你的职业生涯中更加顺利!

1、作为程序员为什么要拥有学位? 很多情况下,作为程序员,学位是进入大公司的敲门砖。 现在很多大的科技公司,学位是硬性要求。 一般都是本科以上的学历,甚至有的必须是硕士以上学历。 如...

IT技术分享社区
03/03
0
0
varchar和nvarchar有什么区别? - What is the difference between varchar and nvarchar?

问题: Is it just that nvarchar supports multibyte characters? 只是nvarchar支持多字节字符吗? If that is the case, is there really any point, other than storage concerns, to us......

技术盛宴
11分钟前
5
0
用flutter给图片加个好看的遮罩层【flutter20个实例之六】

一、老套路,先看样式 左起图一是我业务中的样式,左起图二、三是下方源码展示样式(复制可直接运行,无额外组件引入) 二、讲解 1.结构拆分 我们先看下页面布局结构,首先肯定是有个GridVie...

一代码农码一代
11分钟前
0
0
世界上最美的瀑布在这里,太美了!

亲近大自然,高山流水遇知音,倾听心灵的声音。。。 声明:文章及图片、视频来自网络,如有版权方面的疑问请和我们联系,我们将在24小时内删除。 本文分享自微信公众号 - Python提升课堂(DJXY0...

花儿开放
2014/08/17
0
0
商城小程序制作流程

随着商城小程序的火爆,很多商家都迫不及待的想制作商城小程序,下面就和大家分享一下商城小程序制作流程? 第1步: 注册并认证小程序账号 注册并认证小程序账号,打开百度搜索,“微信公众平...

木鱼小铺小程序1
22分钟前
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部