android-调用本机的联系人界面及返回 - 随心

本文介绍了两种在Android应用中从设备读取联系人信息的方法。方法一通过直接选择电话本条目,但在某些设备上可能遇到问题。方法二提供了一个更通用的解决方案,能够跨多种设备稳定获取联系人的电话号码。

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

首先必加的权限<uses-permission android:name="android.permission.READ_CONTACTS" />

这里写两个方法。

方法一:本人在小米手机测试可以,不过在其他的手机测试发现返回的Uri为空,不知为何,于是找到了第二种方法来解决。

跳转至电话本
       
	Intent i = new Intent(Intent.ACTION_PICK);
	i.setType("vnd.android.cursor.dir/phone");
	startActivityForResult(i, SEND_SMS_TYPE);

返回获取数据

       
	@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
	switch (requestCode) {
	case SEND_SMS_TYPE:
		if(!(resultCode == RESULT_OK)){
			return ;
		}
		if (data == null) {
			return;
		}
		Uri uri = data.getData();
		Cursor cursor = getContentResolver().query(uri, null, null, null,
				null);
		cursor.moveToFirst();

		String number = cursor.getString(cursor
				.getColumnIndexOrThrow(Phones.NUMBER));
		sendAdrress = number;
		SEND_TYPE = SEND_SMS_TYPE;
		send_text_SMS.setText("发送短信" + " : " + number);

		break;
	}
	super.onActivityResult(requestCode, resultCode, data);
}

方法二:

Intent i = new Intent();
i.setAction(Intent.ACTION_PICK);
i.setData(ContactsContract.Contacts.CONTENT_URI);
startActivityForResult(i, SEND_SMS_TYPE);
//-----------------------------------------------------------------
	@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		switch (resultCode) {
		case RESULT_OK:
			switch (requestCode) {
			case SEND_SMS_TYPE:
				if (data == null) {
					return;
				}
				String phoneNumber = null;
				Uri contactData = data.getData();
				if (contactData == null) {
					return ;
				}
				Cursor cursor = managedQuery(contactData, null, null, null, null);
				if (cursor.moveToFirst()) {
//					String name = cursor.getString(cursor
//							.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
					String hasPhone = cursor
							.getString(cursor
									.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER));
					String id = cursor.getString(cursor
							.getColumnIndex(ContactsContract.Contacts._ID));
					if (hasPhone.equalsIgnoreCase("1")) {
						hasPhone = "true";
					} else {
						hasPhone = "false";
					}
					if (Boolean.parseBoolean(hasPhone)) {
						Cursor phones = getContentResolver().query(
								ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
								null,
								ContactsContract.CommonDataKinds.Phone.CONTACT_ID
										+ " = " + id, null, null);
						while (phones.moveToNext()) {
							phoneNumber = phones
									.getString(phones
											.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
							setTitle(phoneNumber);
						}
						phones.close();
					}
				}
				sendAdrress = phoneNumber;
				SEND_TYPE = SEND_SMS_TYPE;
				send_text_SMS.setText("发送短信" + " : " + phoneNumber);

				break;
			}
			break;
		}
		super.onActivityResult(requestCode, resultCode, data);
	}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值