通讯录代码

package cn.test;
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.provider.ContactsContract;
import android.provider.ContactsContract.CommonDataKinds.Email;
import android.provider.ContactsContract.CommonDataKinds.Phone;
import android.provider.ContactsContract.CommonDataKinds.StructuredName;
import android.test.AndroidTestCase;
import android.util.Log;

public class TestContact extends AndroidTestCase {
	private static final String TAG = "TESTCONTACT";
	private ContentResolver contentResolver;
	// 访问通讯录中的所有联系人
	public void testContacts() {
		contentResolver = this.getContext().getContentResolver();
		Uri allContactsUri = Uri.parse("content://com.android.contacts/contacts");
		Cursor allContactsCursor = contentResolver.query(allContactsUri, null,null, null, null);// 从contacts表中得到所有联系人
		StringBuilder builder = new StringBuilder();
		while (allContactsCursor.moveToNext()) {
			int _id = allContactsCursor.getInt(allContactsCursor.getColumnIndex("_id"));
			builder.append("_id=" + _id).append(",");
			Uri perContactUri = Uri.parse("content://com.android.contacts/contacts/" + _id+ "/data");
			Cursor perContactsCursor = contentResolver.query(perContactUri,null, null, null, null);// 得到某个id在data表中的所有数据
			while (perContactsCursor.moveToNext()) {
				// 以下两句涉及到关联查询  data表和mimetype表进行
				String data1 = perContactsCursor.getString(perContactsCursor.getColumnIndex("data1"));// 得到每个联系人的每个data1
				String mimetype = perContactsCursor.getString(perContactsCursor.getColumnIndex("mimetype"));//判断此data1到底是什么含义
				if ("vnd.android.cursor.item/phone_v2".equals(mimetype)) {
					builder.append("phone=").append(data1).append(",");
				} else if ("vnd.android.cursor.item/email_v2".equals(mimetype)) {
					builder.append("email=").append(data1).append(",");
				} else if ("vnd.android.cursor.item/name".equals(mimetype)) {
					builder.append("name=").append(data1).append(",");
				}
			}
			perContactsCursor.close();
		}
		allContactsCursor.close();
		Log.i(TAG, builder.toString());
	}
	//根据电话号码查询出联系人的姓名
	public void getNameByTele(){
		contentResolver = this.getContext().getContentResolver();
		Uri teleUri = Uri.parse("content://com.android.contacts/data/phones/filter/12345");
		// 以下两句涉及到关联查询  data表和raw_contacts表
		//Cursor oneContactCursor = contentResolver.query(teleUri, null,null, null, null);
		//name=oneContactCursor.getString(oneContactCursor.getColumnIndex("display_name"));
		Cursor oneContactCursor = contentResolver.query(teleUri, null,null, null, null);
		String name="";
		while(oneContactCursor.moveToNext()){
			name=oneContactCursor.getString(oneContactCursor.getColumnIndex("display_name"));
		}
		Log.i(TAG,name);
	}

	//向通讯录中添加联系人
	//首先是更新raw_contacts表,表中有一个_id,然后再更新data表,把详细的信息放在此表中
	//并不是先更新data表后更新raw_contacts表.因为data表中有一个外键raw_contact_id与表Raw_contacts的主键_id是一致的
	//raw_contacts表中除了_id以外,其实都是在data表更新后才更新的.
	//第一步:我们向raw_contacts表中添加一条空的数据即可.为了得到其自动增长的主键_id
	//第二步:更新data表中的数据
	//somebody's code
	public void testAddContact1() {
		//以下为第一步
		Uri uri = Uri.parse("content://com.android.contacts/raw_contacts");
		ContentResolver resolver = this.getContext().getContentResolver();
		ContentValues values = new ContentValues();
		Uri insertUri = resolver.insert(uri, values);
		long contactid = ContentUris.parseId(insertUri);
		//以下为第二步
		values.clear();
		values.put("raw_contact_id", contactid);
		values.put(ContactsContract.Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE);
		values.put(StructuredName.GIVEN_NAME, "张三");
		uri = Uri.parse("content://com.android.contacts/data");
		resolver.insert(uri, values);

		values.clear();
		values.put("raw_contact_id", contactid);
		values.put(ContactsContract.Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
		values.put(Phone.NUMBER, "1386595955");
		values.put(Phone.TYPE, Phone.TYPE_MOBILE);
		uri = Uri.parse("content://com.android.contacts/data");
		resolver.insert(uri, values);

		values.clear();
		values.put("raw_contact_id", contactid);
		values.put(ContactsContract.Data.MIMETYPE, Email.CONTENT_ITEM_TYPE);
		values.put(Email.DATA, "test@sina.com");
		values.put(Email.TYPE, Email.TYPE_HOME);
		uri = Uri.parse("content://com.android.contacts/data");
		resolver.insert(uri, values);
	}

	//多个操作在同一个事务中执行
	//要求对以上的几个操作用事务进行管理
	//somebody's code
	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 rawcontactOperation = ContentProviderOperation.newInsert(uri)
														.withValue("account_name", null).build();
		operations.add(rawcontactOperation);

		uri = Uri.parse("content://com.android.contacts/data");
		ContentProviderOperation dataOperation = ContentProviderOperation.newInsert(uri)
		.withValueBackReference("raw_contact_id", 0)
		.withValue("mimetype", "vnd.android.cursor.item/name")
		.withValue("data2", "李白").build();
		operations.add(dataOperation);

		uri = Uri.parse("content://com.android.contacts/data");
		dataOperation = ContentProviderOperation.newInsert(uri)
		.withValueBackReference("raw_contact_id", 0)
		.withValue("mimetype", "vnd.android.cursor.item/phone_v2")
		.withValue("data1", "1386595955")
		.withValue("data2", Phone.TYPE_MOBILE)
		.build();
		operations.add(dataOperation);

		uri = Uri.parse("content://com.android.contacts/data");
		dataOperation = ContentProviderOperation.newInsert(uri)
		.withValueBackReference("raw_contact_id", 0)
		.withValue("mimetype", "vnd.android.cursor.item/email_v2")
		.withValue("data1", "test@sina.com")
		.withValue("data2", Email.TYPE_HOME)
		.build();
		operations.add(dataOperation);

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

	}
}
时间: 2024-12-22 04:57:10

通讯录代码的相关文章

iOS开发中使app获取本机通讯录的实现代码实例_IOS

一.在工程中添加AddressBook.framework和AddressBookUI.framework 二.获取通讯录 1.在infterface中定义数组并在init方法中初始化 复制代码 代码如下: NSMutableArray *addressBookTemp;   - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {     addressBookTemp = [NSMut

Android实现仿通讯录侧边栏滑动SiderBar效果代码_Android

本文实例讲述了Android实现仿通讯录侧边栏滑动SiderBar效果代码.分享给大家供大家参考,具体如下: 之前看到某些应用的侧边栏做得不错,想想自己也弄一个出来,现在分享出来,当然里面还有不足的地方,请大家多多包涵. 先上图: 具体实现的代码如下: package com.freesonfish.listview_index; import android.content.Context; import android.graphics.Canvas; import android.grap

使用C语言打造通讯录管理系统和教学安排系统的代码示例_C 语言

通讯录管理系统实现了通讯录的录入信息.保存信息.插入.删除.排序.查找.单个显示等功能.. 完整的代码如下: #include <stdio.h> #include <malloc.h> //得到指向大小为Size的内存区域的首字节的指针// #include <string.h> #include <stdlib.h> //标准库函数// #define NULL 0 #define LEN sizeof(struct address_list) //计算

Android实现仿通讯录侧边栏滑动SiderBar效果代码

本文实例讲述了Android实现仿通讯录侧边栏滑动SiderBar效果代码.分享给大家供大家参考,具体如下: 之前看到某些应用的侧边栏做得不错,想想自己也弄一个出来,现在分享出来,当然里面还有不足的地方,请大家多多包涵. 先上图: 具体实现的代码如下: package com.freesonfish.listview_index; import android.content.Context; import android.graphics.Canvas; import android.grap

求带数据库的在线通讯录的ASP程序代码

问题描述 我想要一个在线通讯录,单击添加您的记录就可以添加新的人员,单击修改或删除就可以更新记录从数据库里读取如下所示我们的通讯录添加您的新记录姓名电话手机email管理李冰1234513475662146libing@163.com修改删除 解决方案 解决方案二:找找,你要的这种比较多.或者google解决方案三:才做的一个在线增加商品的找葫芦画瓢吧增加商品页面usingSystem;usingSystem.Data;usingSystem.Configuration;usingSystem.

php curl 登录163邮箱并抓取邮箱好友列表的代码(经测试)

CURL技术说白了就是模拟浏览器的动作实现页面抓取或表单提交,通过此技术可以实现许多有去的功能.复制代码 代码如下: <?php error_reporting(0); //邮箱用户名(不带@163.com后缀的) $user = 'papatata_test'; //邮箱密码 $pass = '000000'; //目标邮箱 //$mail_addr = uenucom@163.com'; //登陆 $url = 'http://reg.163.com/logins.jsp?type=1&

苹果手机ios8 launcher APP代码怎么写

  蜂窝网络:prefs:root=MOBILE_DATA_SETTINGS_ID WIFI:prefs:root=WIFI(WIFI这几个字母一定要大写) 定位服务:prefs:root=LOCATION_SERVICES 网易新闻代码 tencent100346651:// 今日头条 tencent100450268:// 百度贴吧 tencent100385258:// ZAKER zakeripad:// qq音乐 tencent100497308.content:// 新浪微博 sin

asp.net导出Excel类库代码分享

 这篇文章主要介绍了asp.net导出Excel类库代码,有需要的朋友可以参考一下    代码如下: using System; using System.Collections.Generic; using System.Reflection; using System.Web; using Excel = Microsoft.Office.Interop.Excel;   /// <summary> ///ExcelClass 的摘要说明 /// </summary> publ

直接用通讯录Excel群发电子邮件

笔者都是使用记有好友Email地址的Excel文件自动给亲友发送电子邮件,这种方法不仅方便快捷,而且这些邮件的收件人.主题.内容.附件都不相同. 一.建立亲友通讯录 在工作表中建立一个包含不同收件人.主题.内容和附件的亲友通讯录. 二.使用宏实现自动发送电子邮件 打开"工具→宏→Visual Basic编辑器",单击"插入→模块"插入一个模块,在"工程"窗口中双击插入的模块,打开它的代码窗口,并输入以下宏: Sub 全自动发送邮件() "