`

Android之通信录中的联系人操作

 
阅读更多
package cn.itcast.contact;

import java.util.ArrayList;

import android.content.ContentProviderOperation;
import android.content.ContentProviderResult;
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.RawContacts;
import android.provider.ContactsContract.CommonDataKinds.Email;
import android.provider.ContactsContract.CommonDataKinds.Phone;
import android.provider.ContactsContract.CommonDataKinds.StructuredName;
import android.provider.ContactsContract.Contacts.Data;
import android.test.AndroidTestCase;
import android.util.Log;

public class ContactTest extends AndroidTestCase {
	private static final String TAG = "ContactTest";
	
	public void testGetAllContact() throws Throwable{
		Uri uri =  ContactsContract.Contacts.CONTENT_URI;
		ContentResolver contentResolver = this.getContext().getContentResolver();
		Cursor cursor = contentResolver.query(uri, null, null, null, null);
		while(cursor.moveToNext()){
			StringBuilder sb = new StringBuilder();
			String contactId = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));  
			String name = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); 
			sb.append("contactId=").append(contactId).append(",name=").append(name);
			
			Cursor phones = contentResolver.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,  
			        null,  
			        ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = "+ contactId,  
			        null, null);  
			while(phones.moveToNext()){
				String phoneNumber = phones.getString(phones.getColumnIndex(
						ContactsContract.CommonDataKinds.Phone.NUMBER));
				sb.append(",phone=").append(phoneNumber);
			}
			phones.close();
			
			Cursor emails = contentResolver.query(ContactsContract.CommonDataKinds.Email.CONTENT_URI,  
				       null,  
				       ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = " + contactId,  
				       null, null);  
			while (emails.moveToNext()) {  
		        String emailAddress = emails.getString(emails.getColumnIndex(
		        		ContactsContract.CommonDataKinds.Email.DATA));
		        sb.append(",emailAddress=").append(emailAddress);
		    } 
			emails.close();
			Log.i(TAG, sb.toString());
		}
		cursor.close();
	}
	
	/**
	 * 首先向RawContacts.CONTENT_URI执行一个空值插入,目的是获取系统返回的rawContactId 
	 * 这时后面插入data表的依据,只有执行空值插入,才能使插入的联系人在通讯录里面可见
	 */
	public void testInsert() {
		ContentValues values = new ContentValues();
		//首先向RawContacts.CONTENT_URI执行一个空值插入,目的是获取系统返回的rawContactId 
		Uri rawContactUri = this.getContext().getContentResolver().insert(RawContacts.CONTENT_URI, values);
		long rawContactId = ContentUris.parseId(rawContactUri);
		//往data表入姓名数据
		values.clear();
		values.put(Data.RAW_CONTACT_ID, rawContactId); 
		values.put(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE);//内容类型
		values.put(StructuredName.GIVEN_NAME, "李天山");
		this.getContext().getContentResolver().insert(android.provider.ContactsContract.Data.CONTENT_URI, values);
		//往data表入电话数据
		values.clear();
		values.put(Data.RAW_CONTACT_ID, rawContactId);
		values.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
		values.put(Phone.NUMBER, "13921009789");
		values.put(Phone.TYPE, Phone.TYPE_MOBILE);
		this.getContext().getContentResolver().insert(android.provider.ContactsContract.Data.CONTENT_URI, values);
		//往data表入Email数据
		values.clear();
		values.put(Data.RAW_CONTACT_ID, rawContactId);
		values.put(Data.MIMETYPE, Email.CONTENT_ITEM_TYPE);
		values.put(Email.DATA, "liming@itcast.cn");
		values.put(Email.TYPE, Email.TYPE_WORK);
		this.getContext().getContentResolver().insert(android.provider.ContactsContract.Data.CONTENT_URI, values);
	}
	//批量添加,处于同一个事务中
	public void testSave() throws Throwable{
		//文档位置:reference\android\provider\ContactsContract.RawContacts.html
		ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
		int rawContactInsertIndex = ops.size();
		ops.add(ContentProviderOperation.newInsert(RawContacts.CONTENT_URI)
				.withValue(RawContacts.ACCOUNT_TYPE, null)
				.withValue(RawContacts.ACCOUNT_NAME, null)
				.build());
		//文档位置:reference\android\provider\ContactsContract.Data.html
		ops.add(ContentProviderOperation.newInsert(android.provider.ContactsContract.Data.CONTENT_URI)
				.withValueBackReference(Data.RAW_CONTACT_ID, rawContactInsertIndex)
				.withValue(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE)
				.withValue(StructuredName.GIVEN_NAME, "赵薇")
				.build());
		ops.add(ContentProviderOperation.newInsert(android.provider.ContactsContract.Data.CONTENT_URI)
				 .withValueBackReference(Data.RAW_CONTACT_ID, rawContactInsertIndex)
		         .withValue(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE)
		         .withValue(Phone.NUMBER, "13671323809")
		         .withValue(Phone.TYPE, Phone.TYPE_MOBILE)
		         .withValue(Phone.LABEL, "手机号")
		         .build());
		ops.add(ContentProviderOperation.newInsert(android.provider.ContactsContract.Data.CONTENT_URI)
				 .withValueBackReference(Data.RAW_CONTACT_ID, rawContactInsertIndex)
		         .withValue(Data.MIMETYPE, Email.CONTENT_ITEM_TYPE)
		         .withValue(Email.DATA, "liming@itcast.cn")
		         .withValue(Email.TYPE, Email.TYPE_WORK)
		         .build());
		ContentProviderResult[] results = this.getContext().getContentResolver()
			.applyBatch(ContactsContract.AUTHORITY, ops);
		for(ContentProviderResult result : results){
			Log.i(TAG, result.uri.toString());
		}
	}

}

 

分享到:
评论

相关推荐

    Android之通信录中的联系人操作代码

    Android之通信录中的联系人操作代码

    Android读取通讯录中设置邮件的联系人

    在Android平台上,获取通讯录中的联系人信息是常见的功能需求,尤其当需要处理与电子邮件相关的应用时。这个DEMO展示了如何有效地读取那些在联系人信息中设置了电子邮件地址的联系人。下面我们将深入探讨实现这一...

    Android 获取通讯录联系人信息源码

    在Android平台上,获取通讯录联系人信息是常见的需求,尤其对于开发涉及社交功能的应用来说更是必不可少。本示例源码提供了实现这一功能的方法,帮助开发者深入理解如何在Android应用中读取并操作用户通讯录数据。 ...

    Android手机的通讯录联系人信息.zip

    本资料包“Android手机的通讯录联系人信息.zip”提供了Android应用开发的源码示例,帮助开发者深入理解如何在Android平台上操作和管理联系人数据。 首先,Android的通讯录功能是基于Content Provider构建的,...

    Android Studio简易通讯录界面.rar

    3. **手机通讯录信息的UI适配**:在Android Studio中,我们可以使用布局文件(如XML)设计通讯录界面,一般包含一个ListView用于显示联系人列表。ListView是Android中用来展示大量数据的视图组件,每个列表项可以...

    android访问通讯录中的联系人和添加联系人

    以上就是Android访问通讯录中的联系人和添加联系人的基本操作。实际开发中,还需要考虑权限动态申请、多线程访问和错误处理等问题。同时,Android API的不同版本可能会有一些细微的差异,需要根据目标设备的Android...

    android 往通讯录中添加和删除联系人

    在Android系统中,管理通讯录是应用程序常见的功能之一,包括添加新联系人和删除现有联系人。本知识点将深入探讨如何实现这些操作。 首先,我们要理解Android中的联系人API。Android提供了一个Content Provider来...

    android通讯录(完整,可运行)

    本文将详细介绍一个基于adt-bundle-windows工具集开发的、完整的、可运行的Android通讯录系统,它涵盖了通讯录应用的核心功能:增加、删除、修改和查询联系人。 一、adt-bundle-windows与Android开发环境搭建 adt-...

    Android通讯录管理(获取联系人、通话记录、短信消息)

    Android提供了一套完整的API来访问和操作联系人数据。主要涉及`ContactsContract`类,它定义了一个内容提供者接口,允许应用读取和写入联系人信息。获取联系人通常分为以下步骤: - 请求权限:在AndroidManifest....

    android 联系人 SIM卡 最近联系人 通讯录 获取源代码

    在Android开发中,获取联系人、SIM卡信息以及最近联系人列表是常见的需求。下面将详细解释这些概念和实现方式。 一、Android联系人管理 Android系统提供了ContentProvider接口来访问和操作联系人数据。主要涉及到...

    Android开发实验---通讯录.docx

    在数据库操作中,需使用ContentValues对象来封装数据,通过SQLiteOpenHelper子类进行增删查改操作。 2. **UI设计**:考虑用户体验,设计合理的界面布局,如使用ListView或RecyclerView展示联系人列表,提供拨号键盘...

    Android手机通讯录制作

    点击通讯录中一个已存在的联系人,进入编辑界面,可修改联系人的资料或进行删除操作,完成后返回到主界面。 查找联系人 点击通讯录选项菜单中的“查找联系人”菜单项,进入搜索界面,能通过姓名、手机号码、单位名称...

    android增加联系人到通讯录

    首先,我们要明白在Android中操作联系人数据需要`READ_CONTACTS`和`WRITE_CONTACTS`权限。在AndroidManifest.xml文件中,我们需要添加以下代码来获取这些权限: ```xml &lt;uses-permission android:name="android....

    基于Android 的通讯录设计

    综上所述,这个基于Android的通讯录设计项目涵盖了Android开发的多个核心领域,包括数据库操作、UI设计、组件通信、权限管理以及图像处理等。通过这样的项目实践,开发者可以深入理解Android应用的架构和工作原理,...

    Android代码-Android手机的通讯录联系人信息.zip

    下面将详细介绍Android平台中处理通讯录联系人信息的关键知识点。 首先,Android提供了`ContactsContract`框架,这是一个用于访问和操作设备上联系人数据的API。开发者可以通过这个框架来获取联系人的姓名、电话...

    Android手机通讯录快速筛选联系人

    在Android开发中,实现“Android手机通讯录快速筛选联系人”的功能是一项常用且实用的技术。这一功能主要涉及到了ListView的使用、数据排序以及触摸事件处理等多个知识点。下面将详细讲解这些核心内容。 首先,`...

    使用android通讯录中的内容提供者实例

    在这个实例中,我们将深入探讨如何使用Android通讯录的内容提供者来查询和添加联系人。 一、Android内容提供者基础 内容提供者是一个实现了ContentProvider类的组件,它负责存储、检索以及更新应用程序的数据。每个...

    基于Android Studio开发的安卓的通讯录管理app

    【基于Android Studio开发的安卓通讯录管理App】是一款利用谷歌提供的Android Studio集成开发环境构建的应用程序,它专注于管理和操作用户的联系人数据。该应用涵盖了多种关键功能,包括新增联系人、编辑现有联系人...

    Android-Android手机通讯录

    【Android手机通讯录】是一个基于Android平台的项目,旨在实现对手机中联系人的管理功能。这个项目最初是在ADT(Android Developer Tools)环境下构建的,ADT是早期Android开发者常用的集成开发环境。随着时间的推移...

    Android2.2通讯录源码

    在源码中,我们可以看到如何定义和注册BroadcastReceiver,以及响应各种联系人操作的逻辑。 5. **同步与账户管理**:Android 2.2支持多种同步机制,包括Google账户和其他第三方账户。源码展示了如何集成SyncAdapter...

Global site tag (gtag.js) - Google Analytics