文档章节

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

ht896632
 ht896632
发布于 2016/03/02 14:07
字数 586
阅读 9
收藏 0
点赞 1
评论 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
粉丝 33
博文 53
码字总数 31361
作品 0
闵行
高级程序员
说说 Android 的内容提供器(ContentResolver )

如果一个 APP 使用内容提供器对其数据提供了对外访问的接口,那么任何其他的 APP 都可以访问这部分的数据啦,像 Android 中的电话簿、短信等程序都提供了类似的访问接口。 1 ContentResolve...

deniro ⋅ 05/05 ⋅ 0

Android开发权威指南(第2版)新书发布

《Android开发权威指南(第二版)》是畅销书《Android开发权威指南》的升级版,内容更新超过80%,是一本全面介绍Android应用开发的专著,拥有45章精彩内容供读者学习。  《Android开发权威指...

androidguy ⋅ 2013/09/05 ⋅ 0

Android基础之应用程序组件

Android应用程序由若干个不同类型的组件组合而成,每一个组件具有其特定的安全保护设计方式,它们的安全直接影响到应用程序的安全。Android应用程序组件的主要类型有:活动(Activity),服务...

柳哥 ⋅ 2014/11/28 ⋅ 0

Android四大组件之ContentProvide(内容提供者)

访问私有数据库 创建一个项目,在项目中利用SQLiteOpenHelper创建一个名称为account的数据库,并在数据库中创建一张名为info的表。 在MainActivity中需要调用以下代码才能创建数据库: 运行程...

早早的太阳 ⋅ 2016/09/25 ⋅ 0

Android应用程序基础(Application Fundamentals)之一

正在尝试分析SDK中的示例程序NotePad,发现仍然还欠缺很多知识。今天看到 API Guides 下有一部分应用程序基础 Application Fundamentals,感觉需要进一步学习。于是准备采用之前的策略,边翻...

AllenYao ⋅ 2013/01/31 ⋅ 0

Flutter Plugin开发流程

这篇文章主要介绍了Flutter Plugin开发流程,包括如何利用Android Studio开发以及发布等。 今天这篇文章,给大家介绍如何开发Flutter Plugin中Android的部分。有关Flutter以及Flutter Plugi...

Q吹个大气球Q ⋅ 05/12 ⋅ 0

Android JNI学习(二)——实战JNI之“hello world”

本系列文章如下: Android JNI(一)——NDK与JNI基础 Android JNI学习(二)——实战JNI之“hello world” Android JNI学习(三)——Java与Native相互调用 Android JNI学习(四)——JNI的常用方法...

隔壁老李头 ⋅ 05/09 ⋅ 0

Android特色开发之桌面组件

本文节选于机械工业出版社推出的《Android应用开发揭秘》一书,作者为杨丰盛。本书内容全面,详细讲解了Android框架、Android组件、用户界面开发、游戏开发、数据存储、多媒体开发和网络开发...

yarin ⋅ 2011/01/15 ⋅ 0

Android Transition Animation 过渡动画解析

本文主要译自 lgvalle 的 Material-Animations 的 README.MD,文中的源码见 Material-Animations。 Android 4.4.2 中引入了 Transition 过渡动画,不过那时的 API 的功能比较简单,只能对整个...

JohnnyShieh ⋅ 04/09 ⋅ 0

Android 面试技能树梳理

相信大家都有面试的经历,相对比面试官的问的一些问题其实都是基础的知识,但就是一些基础的知识我们也不是很完美的回答出来,我们也知道现在的开发人员很多,一家公司一个岗位就会有很多的开...

liu3364575 ⋅ 05/05 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

mysql in action / alter table

change character set ALTER SCHEMA `employees` DEFAULT CHARACTER SET utf8mb4 DEFAULT COLLATE utf8mb4_general_ci ;ALTER TABLE `employees`.`t2` CHARACTER SET = utf8mb4 , COLLAT......

qwfys ⋅ 今天 ⋅ 0

Java 开发者不容错过的 12 种高效工具

Java 开发者常常都会想办法如何更快地编写 Java 代码,让编程变得更加轻松。目前,市面上涌现出越来越多的高效编程工具。所以,以下总结了一系列工具列表,其中包含了大多数开发人员已经使用...

jason_kiss ⋅ 昨天 ⋅ 0

Linux下php访问远程ms sqlserver

1、安装freetds(略,安装在/opt/local/freetds 下) 2、cd /path/to/php-5.6.36/ 进入PHP源码目录 3、cd ext/mssql进入MSSQL模块源码目录 4、/opt/php/bin/phpize生成编译配置文件 5、 . ./...

wangxuwei ⋅ 昨天 ⋅ 0

如何成为技术专家

文章来源于 -- 时间的朋友 拥有良好的心态。首先要有空杯心态,用欣赏的眼光发现并学习别人的长处,包括但不限于工具的使用,工作方法,解决问题以及规划未来的能力等。向别人学习的同时要注...

长安一梦 ⋅ 昨天 ⋅ 0

Linux vmstat命令实战详解

vmstat命令是最常见的Linux/Unix监控工具,可以展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率,内存使用,虚拟内存交换情况,IO读写情况。这个命令是我查看Linux/Unix最喜爱的命令...

刘祖鹏 ⋅ 昨天 ⋅ 0

MySQL

查看表相关命令 - 查看表结构    desc 表名- 查看生成表的SQL    show create table 表名- 查看索引    show index from  表名 使用索引和不使用索引 由于索引是专门用于加...

stars永恒 ⋅ 昨天 ⋅ 0

easyui学习笔记

EasyUI常用控件禁用方法 combobox $("#id").combobox({ disabled: true }); ----- $("#id").combobox({ disabled: false}); validatebox $("#id").attr("readonly", true); ----- $("#id").r......

miaojiangmin ⋅ 昨天 ⋅ 0

金山WPS发布了Linux WPS Office

导读 近日,金山WPS发布了Linux WPS Office中文社区版新版本,支持大部分主流Linux系统,功能更加完善,兼容性、稳定性大幅度提升。本次更新WPS将首次在Linux提供专业办公文件云存储服务,实...

问题终结者 ⋅ 昨天 ⋅ 0

springboot2输出metrics到influxdb

序 本文主要研究一下如何将springboot2的metrics输出到influxdb maven <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-bo......

go4it ⋅ 昨天 ⋅ 0

微信小程序 - 选择图片显示操作菜单

之前我分享过选择图片这个文章,但是我在实际开发测试使用中发现一个问题在使用 wx.chooseImage 选择照片显示出第一格是拍照,后面是相册里的图片。这种实现之前说过了,效果如下。 但是你从...

hello_hp ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部