安卓选择通讯录联系人和获取全部联系人

本文介绍如何在Android应用中读取设备上的联系人信息,并实现从应用内部直接拨打电话的功能。主要内容包括申请必要的权限、使用ContentResolver查询联系人数据、启动系统拨号器及直接拨打电话。

点击电话按钮,进入到手机通讯录,直接选择联系人,将手机号码带回。

读取联系人,所以申请权限

<uses-permission android:name="android.permission.READ_CONTACTS"/>
点击电话按钮跳转

startActivityForResult(new Intent(Intent.ACTION_PICK,
                    ContactsContract.Contacts.CONTENT_URI), 0);
实现获取号码

@Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            super.onActivityResult(requestCode, resultCode, data);
            if (resultCode == Activity.RESULT_OK) {
                // ContentProvider展示数据类似一个单个数据库表
                // ContentResolver实例带的方法可实现找到指定的ContentProvider并获取到ContentProvider的数据
                ContentResolver reContentResolverol = getContentResolver();
                // URI,每个ContentProvider定义一个唯一的公开的URI,用于指定到它的数据集
                Uri contactData = data.getData();
                // 查询就是输入URI等参数,其中URI是必须的,其他是可选的,如果系统能找到URI对应的ContentProvider将返回一个Cursor对象.
                Cursor cursor = managedQuery(contactData, null, null, null, null);
                cursor.moveToFirst();
                // 条件为联系人ID
                String contactId = cursor.getString(cursor
                        .getColumnIndex(ContactsContract.Contacts._ID));
                // 获得DATA表中的电话号码,条件为联系人ID,因为手机号码可能会有多个
                Cursor phone = reContentResolverol.query(
                        ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,
                        ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = "
                                + contactId, null, null);
                while (phone.moveToNext()) {
                    String usernumber = phone
                            .getString(phone
                                    .getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
                    et_mobile.setText(usernumber);
                }

            }
        }

获取全部联系人

// 获取联系人数据
ContentResolver cr = context.getContentResolver();
//获取所有电话信息(而不是联系人信息),这样方便展示
Uri uri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI;
String[] projection = {
		ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,// 姓名
		ContactsContract.CommonDataKinds.Phone.NUMBER,// 电话号码
};
Cursor cursor = cr.query(uri, projection, null, null, null);
if (cursor == null) {
	return null;
}
//最终要返回的数据
List<ContactInfo> result = new ArrayList<ContactInfo>();
while (cursor.moveToNext()) {
	String name = cursor.getString(0);
	String number = cursor.getString(1);
	//保存到对象里
	ContactInfo info = new ContactInfo();
	info.setName(name);
	info.setNumber(number);
	//保存到集合里
	result.add(info);
}
//用完记得关闭
cursor.close();
return result;
public class ContactInfo {
	private String name;// 姓名
	private String number;// 电话号码
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getNumber() {
		return number;
	}
	public void setNumber(String number) {
		this.number = number;
	}
}


打电话拨号功能:

权限:

<uses-permission android:name="android.permission.CALL_PHONE"/>
代码:

Intent intent = new Intent();
intent.setAction(Intent.ACTION_CALL);//ACTION_DIAL
intent.setData(Uri.parse("tel:"+"110"));
startActivity(intent);



评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值