首页 > 代码库 > 赵雅智_android系统联系人app分析并获取数据

赵雅智_android系统联系人app分析并获取数据

手机联系人存放位置

和短信一样在data-data下


手机联系人数据库解析

将contacts2.db表导出,通过SQLiteexpert查看
mimetypes表:存放的数据类型(电话,头像,姓名,邮箱)

外键:



raw_contacts表:存放联系人的id

contact_id:联系人id
display_name:联系人姓名

data表:存放联系人的数据

data1:联系人数据
data2:在mimetypes表中data1表示值得意义
mimetype_id:联系人ID,data数据所属的联系人
外键:
raw_contact_id:和raw_contacts表关联
mimetype_id:和mimetypes表关联

contact表

外键


获取联系人的信息:
  1. 查询raw_contact表,把联系人的id获取出来
  2. 根据联系人的id查询data表,把这个联系人的相应数据获取出来
  3. 查询mimetypes表,获取数据类型
插入一个联系人信息
  1. 首先插入raw_contact表写入一个新的联系人id
  2. 根据新创建的id 写入到data表 data1 mimetype

手机联系人源码解析

在android系统的联系人代码中,AndroidMenifest.xml定义了提供外接查询的接口

在android系统联系人中,定义了联系人有关的urimatcher



在android api中的ContactsContractData为我们提供了响应方法及简单用例:
添加方法


查询方法


删除更新方法



步骤

得到内容解析器
查询数据
显示数据

主要代码

package com.example.android_readphone.provider;

import android.content.ContentResolver;
import android.database.Cursor;
import android.net.Uri;
import android.provider.ContactsContract;
import android.test.AndroidTestCase;

/**
 * 测试获取联系人
 * 
 * @author zhaoyazhi
 * 
 */
public class PhoneProviderTest extends AndroidTestCase {

	public void readContacts() {
		ContentResolver contentResolver = getContext().getContentResolver();
		Cursor c = contentResolver.query(
				ContactsContract.RawContacts.CONTENT_URI, new String[] { "_id",
						"display_name"  }, null, null, null);
		while (c.moveToNext()) {
			String id = c.getString(c
					.getColumnIndex(ContactsContract.RawContacts._ID));
			String name = c.getString(c.getColumnIndex("display_name"));
			System.out.println("序号id:" + id + "----------name:" + name
					 );
		}
		c.close();

	}
}


输出结果:


android联系人系统源码:http://download.csdn.net/detail/zhaoyazhi2129/7491109