ContactsContract获取联系人信息及双向查找联系人信息

本文介绍了如何在Android应用中读取设备上的联系人信息,包括读取权限配置、使用Content Provider查询联系人数据的方法,并提供了按姓名和电话号码检索联系人的示例代码。

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

添加权限:

 

<uses-permission
		android:name="android.permission.READ_CONTACTS"></uses-permission>
 

 

try {
			/* 必须要有android.permission.READ_CONTACTS权限 */
			Cursor cursor = managedQuery(
					android.provider.ContactsContract.Contacts.CONTENT_URI,
					null, null, null, null);
			/* 将Cursor移到资料最前端 */
			for (cursor.moveToFirst(); !cursor.isAfterLast(); cursor
					.moveToNext()) {

				/* 取得联络人的姓名 */
				String strName = cursor
						.getString(cursor
								.getColumnIndexOrThrow(ContactsContract.Contacts.DISPLAY_NAME));
				/* 取得联络人的电话 */
				int contactId = cursor.getInt(cursor
						.getColumnIndex(ContactsContract.Contacts._ID));
				Cursor phones = getContentResolver().query(
						ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
						null,
						ContactsContract.CommonDataKinds.Phone.CONTACT_ID
								+ " = " + contactId, null, null);
				int typePhone, resType;
				String numPhone;
				if (phones.getCount() > 0) {
					phones.moveToFirst();
					/* 2.0可以允许User设定多组电话号码,但本范例只捞一组电话号码作示范 */
					typePhone = phones
							.getInt(phones
									.getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE));
					numPhone = phones
							.getString(phones
									.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
					resType = ContactsContract.CommonDataKinds.Phone
							.getTypeLabelResource(typePhone);
					addItem(strName, getString(resType) + ":" + numPhone);//添加到ListView中,此代码略去
				}

			}
		} catch (Exception e) {
			e.printStackTrace();
		}


 

根据号码查找联系人

 

 

public String getContactPeople(String incomingNumber) {
		
		String contactPeople = "";
		
		ContentResolver contentResolver = getContentResolver();
		Cursor cursor = null;

		/* cursor里要放的字段名称 */
		String[] projection = new String[] { ContactsContract.Contacts._ID,
				ContactsContract.Contacts.DISPLAY_NAME,
				ContactsContract.CommonDataKinds.Phone.NUMBER };

		/* 用来电电话号码查找该联系人 */
		cursor = contentResolver.query(
				ContactsContract.CommonDataKinds.Phone.CONTENT_URI, projection,
				ContactsContract.CommonDataKinds.Phone.NUMBER + "=?",
				new String[] { incomingNumber }, "");

		/* 找不到联系人 */
		if (cursor.getCount() == 0) {
			contactPeople = "未知联系人";
		} else if (cursor.getCount() > 0) {
			cursor.moveToFirst();
			/* projection这个数组里 */
			contactPeople = cursor.getString(1);
		}
		
		return contactPeople;

	}

根据联系人查找号码

/* 以联系人名称搜索通信录中联系人的电话的method */
	private String getContactPeople(String name) {
		String result = "";
		ContentResolver contentResolver = EX06_23.this.getContentResolver();
		Cursor cursor = null;

		/* 要搜索的字段名称 */
		String[] projection = new String[] { ContactsContract.CommonDataKinds.Phone.NUMBER };

		/* 以联系人的名字去找该联系人的电话 */
		cursor = contentResolver.query(
				ContactsContract.CommonDataKinds.Phone.CONTENT_URI, projection,
				ContactsContract.Contacts.DISPLAY_NAME + "=?",
				new String[] { name }, "");

		if (cursor.getCount() != 0) {
			cursor.moveToFirst();
			/* 取得联系人电话 */
			result = cursor.getString(0);
		}
		return result;
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值