手机卫士学习19-读取联系人数据库

本文介绍如何在Android系统中通过ContentResolver读取联系人数据库。主要包括:获取联系人内容解析器、创建访问表的Uri、查询联系人数据库以及从raw_contacts表获取contact_id,并通过data表获取mimetype与data1。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

读取联系人数据库

1    获取  联系人内容解析器
2     创建要访问表的Uri
3    通过内容解析器查询联系人数据库
4    raw_contacts表获取contact_id,data表通过contact_id获取mimetype与data1

---------------------------------------------------------------------------------------------------------------------------------


1    获取  联系人内容解析器

// 获取联系人内容解析器
		ContentResolver resolver = getContentResolver();

2     创建要访问表的Uri

// 表的URL 1.raw_contacts 2.data
		Uri uri = Uri.parse("content://com.android.contacts/raw_contacts");
		Uri dataUri = Uri.parse("content://com.android.contacts/data");

3    通过内容解析器查询联系人数据库

// 查询表 raw_contacts,获取结果
		Cursor cursor = resolver.query(uri, new String[] { "contact_id" },
				null, null, null);


4    raw_contacts表获取contact_id,data表通过contact_id获取mimetype与data1

private List<Map<String, String>> getContacts() {
		// 获取系统联系人

		// 所有联系人
		List<Map<String, String>> list = new ArrayList<Map<String, String>>();
		// 获取联系人内容解析器
		ContentResolver resolver = getContentResolver();
		// 表的URL 1.raw_contacts 2.data
		Uri uri = Uri.parse("content://com.android.contacts/raw_contacts");
		Uri dataUri = Uri.parse("content://com.android.contacts/data");

		// 查询表 raw_contacts,获取结果
		Cursor cursor = resolver.query(uri, new String[] { "contact_id" },
				null, null, null);

		while (cursor.moveToNext()) {
			String contact_id = cursor.getString(0);
			if (!TextUtils.isEmpty(contact_id)) {
				// 查询id对应联系人信息,继续查询表 data
				Cursor dataCursor = resolver.query(dataUri, new String[] {
						"mimetype", "data1" }, "contact_id=?",
						new String[] { contact_id }, null);

				Map<String, String> map = new HashMap<String, String>();
				while (dataCursor.moveToNext()) {
					String mimetype = dataCursor.getString(0);
					String data1 = dataCursor.getString(1);
					if ("vnd.android.cursor.item/phone_v2".equals(mimetype)) {
						// phone
						map.put("phone", data1);
					} else if ("vnd.android.cursor.item/name".equals(mimetype)) {
						// name
						map.put("name", data1);
					}
				}
				list.add(map);
				dataCursor.close();

			}
		}
		cursor.close();
		return list;
	}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值