点击电话按钮,进入到手机通讯录,直接选择联系人,将手机号码带回。
读取联系人,所以申请权限
<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);
本文介绍如何在Android应用中读取设备上的联系人信息,并实现从应用内部直接拨打电话的功能。主要内容包括申请必要的权限、使用ContentResolver查询联系人数据、启动系统拨号器及直接拨打电话。
377





