首页 > 代码库 > Android学习笔记:访问和添加通讯录中的联系人和联系人数据库表简介一
Android学习笔记:访问和添加通讯录中的联系人和联系人数据库表简介一
直接看代码,有详细注释。
1.联系人的数据库文件的位置
/data/data/com.android.providers.contacts/databases.contacts2.db
/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学习笔记:访问和添加通讯录中的联系人和联系人数据库表简介一
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。