首页 > 代码库 > Android学习笔记:访问和添加通讯录中的联系人和联系人数据库表简介一

Android学习笔记:访问和添加通讯录中的联系人和联系人数据库表简介一

直接看代码,有详细注释。

技术分享
1.联系人的数据库文件的位置
/data/data/com.android.providers.contacts/databases.contacts2.db
技术分享
2.数据库中重要的几张表
contacts表:该表保存了所有的手机联系人,每个联系人占一行,该表保存了联系人的ContactID、联系次数、         最后一次联系的时间、是否含有号码、是否被添加到收藏夹等信息。可以与表的字段名相对应     理解。
raw_contacts表:该表保存了所有创建过的手机联系人,每个联系人占一行,表里有一列标识该联系人是否被删除,该表保存了两个ID:RawContactID和ContactID,从而将contacts表和raw_contacts表联系起来。该表保存了联系人的RawContactID、ContactID、联系次数、最后一次联系的时间是否被添加到收藏夹、显示的名字、用于排序的汉语拼音等信息。   
mimetypes 表:该表定义了所有的MimeTypeID,即联系人的各个字段的唯一标志。

技术分享

data表:该表保存了所有创建过的手机测联系人的所有信息,每个字段占一行 ,该表保存了两个ID:MimeTypeID和RawContactID,从而将data表和raw_contacts表联系起来。联系人的所有信息保存在列data1至data15中,各列中保存的内容根据MimeTypeID的不同而不同。如保存号码(MimeTypeID=5)的那行数据中data1列保存号码,data2列保存号码类型(手机号码/家庭号码/工作号码等)。

package com.example.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.test.AndroidTestCase;
import android.util.Log;

public class ContactsTest extends AndroidTestCase {

	private static final String tag="ContactsTest";
	public void testContacts() throws Exception //测试查询联系人
	{
		/*
	 	Content URI 是一种用于标识 Provider 数据的 URI。 Content URI 包括了整个 Provider 
	 	的符号名称(authority)和表名(path)。 调用客户端的方法访问 Provider 数据表时,
	 	表的 Content URI 是参数之一。Uri uri=Uri.parse("content://com.android.contacts/contacts");
	 */
		//这里的字符串com.android.contacts 是 Provider 的 authority 部分, 字符串 contacts 是数据表的 path 部分。 字符串 content:// (scheme)是必须指定的,以表明这是一个 Content URI。
		Uri uri=Uri.parse("content://com.android.contacts/contacts");
		ContentResolver resolver=this.getContext().getContentResolver();
		Cursor cursor=resolver.query(uri, new String[]{"_id"}, null, null, null);
		while(cursor.moveToNext())
		{
			int contactid=cursor.getInt(0);
			StringBuffer sb=new StringBuffer("contactid=");
			sb.append(contactid);
			uri=Uri.parse("content://com.android.contacts/contacts/"+contactid+"/data");
			/*
			Cursor = getContentResolver().query(
			    uri,   							// 联系人的URI
			    mProjection,                    // 需要返回的列
			    mSelectionClause,               // 查询条件
			    mSelectionArgs,                 // 查询条件的参数
			    mSortOrder);                    // 返回结果的排序要求
			    */
			Cursor datacursor=resolver.query(uri	//联系人的URI
					, new String[]{"mimetype","data1","data2"}//需要返回的列
					, null				//查询条件
					, null				//查询条件的参数
					, null);			//返回结果的排序要求
			while(datacursor.moveToNext())
			{
				String data=http://www.mamicode.com/datacursor.getString(datacursor.getColumnIndex("data1"));>

完成以上测试代码还需要添加对联系人表操作的响应权限。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.contacts"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="14"
        android:targetSdkVersion="21" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <uses-library android:name="android.test.runner"/>
    </application>
    <instrumentation android:name="android.test.InstrumentationTestRunner" android:targetPackage="com.example.contacts"></instrumentation>
<uses-permission android:name="android.permission.READ_CONTACTS"/>
<uses-permission android:name="android.permission.WRITE_CONTACTS"/>"
</manifest>

这是对联系人操作对应的权限:

<uses-permission android:name="android.permission.READ_CONTACTS" 
/>
<uses-permission android:name="android.permission.WRITE_CONTACTS" 
/> 
这是对测试单元对应的权限和依赖库:

<instrumentation android:name="android.test.InstrumentationTestRunner" android:targetPackage="com.example.contacts"></instrumentation>
 <uses-library android:name="android.test.runner"/>

Android学习笔记:访问和添加通讯录中的联系人和联系人数据库表简介一