Android_ContentProvider_访问通讯录

1.简介

联系人提供者是一个很强很灵活的应用组件,用来管理联系人信息,可以方便的操作和查询联系人信息!

主要的3张表格,contact,raw contact,data,但是我们操作主要为raw contact,data两张表


raw contacttable


data table


2.插入联系人

/**
 * 使用批处理,插入联系人信息
 * 插入姓名,email,家庭电话,工作电话,手机号码信息
 * @param view
 */
public void insert() {
	String name = etName.getText().toString().trim();
	String email = etEmail.getText().toString().trim();
	String numHome = etNumHome.getText().toString().trim();
	String numWork = etNumWork.getText().toString().trim();
	String numMobile = etNumMobile.getText().toString().trim();

	ArrayList<ContentProviderOperation> list = new ArrayList<ContentProviderOperation>();
	ContentProviderOperation.Builder builder = null;

	// 插入原始数据
	builder = ContentProviderOperation.newInsert(RawContacts.CONTENT_URI)
			.withValue(RawContacts.ACCOUNT_NAME, "")
			.withValue(RawContacts.ACCOUNT_TYPE, "")
			.withValue(RawContacts.DELETED, 0);
	list.add(builder.build());

	// 插入用户名
	builder = ContentProviderOperation.newInsert(Data.CONTENT_URI)
			.withValue(StructuredName.DISPLAY_NAME, name)
			.withValue(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE)
			.withValueBackReference(Data.RAW_CONTACT_ID, 0);
	list.add(builder.build());

	// 插入email
	builder = ContentProviderOperation.newInsert(Data.CONTENT_URI)
			.withValue(Email.ADDRESS, email)
			.withValue(Data.MIMETYPE, Email.CONTENT_ITEM_TYPE)
			.withValueBackReference(Data.RAW_CONTACT_ID, 0);
	list.add(builder.build());

	// 插入 家庭电话号码
	builder = ContentProviderOperation.newInsert(Data.CONTENT_URI)
			.withValue(Phone.NUMBER, numHome)
			.withValue(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE)
			.withValue(Phone.TYPE, Phone.TYPE_HOME)
			.withValueBackReference(Data.RAW_CONTACT_ID, 0);
	list.add(builder.build());

	// 插入工作电话号码
	builder = ContentProviderOperation.newInsert(Data.CONTENT_URI)
			.withValue(Phone.NUMBER, numWork)
			.withValue(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE)
			.withValue(Phone.TYPE, Phone.TYPE_WORK)
			.withValueBackReference(Data.RAW_CONTACT_ID, 0);
	list.add(builder.build());

	// 插入手机号码
	builder = ContentProviderOperation.newInsert(Data.CONTENT_URI)
			.withValue(Phone.NUMBER, numMobile)
			.withValue(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE)
			.withValue(Phone.TYPE, Phone.TYPE_MOBILE)
			.withValueBackReference(Data.RAW_CONTACT_ID, 0);
	list.add(builder.build());

	try {
		resolver.applyBatch(ContactsContract.AUTHORITY, list);
		showOk();
		System.out.println("插入成功");
	} catch (Exception e) {
		e.printStackTrace();
		System.out.println("插入失败!");
	}
}

3.访问通讯录

/**
 * 自定义加载线程,访问通讯录联系人信息
 * 
 * @author Administrator
 * 
 */
private class LoadContactThread extends Thread {
	@Override
	public void run() {
		List<ContactsInfo> infos = new ArrayList<ContactsInfo>();
		Cursor cursor = resolver.query(RawContacts.CONTENT_URI,
				new String[] { RawContacts._ID }, 
				RawContacts.DELETED + "=?", 
				new String[] { "0" }, null);

		while (cursor.moveToNext()) {
			ContactsInfo info = new ContactsInfo();
			String id = cursor.getString(0);
			info.setId(id);

			Cursor c = resolver.query(Data.CONTENT_URI, new String[] {
					"data1", "data2", "mimetype" }, Data.RAW_CONTACT_ID
					+ "=?", new String[] { id }, null);

			while (c.moveToNext()) {
				String data = c.getString(0);
				String type = c.getString(1);
				String mimetype = c.getString(2);
				if (StructuredName.CONTENT_ITEM_TYPE.equals(mimetype)) { // 用户名
					info.setName(data);
				} else if (Email.CONTENT_ITEM_TYPE.equals(mimetype)) { // email
					info.setEmail(data);
				} else if (Phone.CONTENT_ITEM_TYPE.equals(mimetype)) { // 电话
					int t = Integer.parseInt(type);
					if (Phone.TYPE_HOME == t) { // 家庭电话
						info.setNumHome(data);
					} else if (Phone.TYPE_WORK == t) { // 工作电话
						info.setNumWork(data);
					} else if (Phone.TYPE_MOBILE == t) {// 手机
						info.setNumMobile(data);
					}
				}
			}
			c.close(); // 关闭游标
			infos.add(info);// 添加进集合
		}
		cursor.close(); // 关闭游标

		Message msg = handler.obtainMessage();
		msg.obj = infos;
		handler.sendMessage(msg);
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值