android获取通讯录号码,读取通讯录号码

#### 权限

~~~

~~~

#### 跳转到通讯录

~~~

Intent intent = new Intent(Intent.ACTION_PICK, android.provider.ContactsContract.Contacts.CONTENT_URI);

startActivityForResult(intent, 1);

~~~

#### 定义通用方法

~~~

private List getContactPhone(Cursor cursor) {

// phoneNum 如果值为1,则该联系人至少有一个电话号码;如果值为0,则该联系人没有电话号码

int phoneColumn = cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER);

int phoneNum = cursor.getInt(phoneColumn);

List phoneResult = new ArrayList();

if (phoneNum > 0) {

// contactId 获得联系人的ID号

int idColumn = cursor.getColumnIndex(ContactsContract.Contacts._ID);

String contactId = cursor.getString(idColumn);

// 获得联系人的电话号码的cursor;

Cursor phones = getContentResolver().query(

ContactsContract.CommonDataKinds.Phone.CONTENT_URI,

null,

ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = "

+ contactId, null, null);

if (phones.moveToFirst()) {

// 遍历所有的电话号码

for (; !phones.isAfterLast(); phones.moveToNext()) {

int index = phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER);

//int typeindex = phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE);

// phone_type 原生系统 mobile是2,home是1,work是3,other是7. 其他安卓系统做了部分变更,但大部分mobile都是2

//int phone_type = phones.getInt(typeindex);

// 如果要姓名使用 phoneName=phones.getString(phones.getColumnIndex(PhoneLookup.DISPLAY_NAME));

String phoneNumber = phones.getString(index);

phoneResult.add(phoneNumber);

}

if (!phones.isClosed()) {

phones.close();

}

}

}

return phoneResult;

}

~~~

#### 回调方法

~~~

protected void onActivityResult(int requestCode, int resultCode, Intent data) {

super.onActivityResult(requestCode, resultCode, data);

Uri uri = data.getData();

// 得到ContentResolver对象

ContentResolver cr = getContentResolver();

// 取得电话本中开始一项的光标

// 参数含义

// uri fromtable_name 指定查询某个应用程序下的某一张表

// projection selectcolumn1,column2 指定查询的列名

// selection wherecolumn=value 指定where的约束条件

// selectionArgs - 为where中的占位符提供具体的值

// orderBy orderbycolumn1,column2 指定查询结果的排序方式

Cursor cursor = cr.query(uri, null, null, null, null);

cursor.moveToFirst();

List nums = getContactPhone(cursor);

tv_phones.setText(nums.toString());

}

~~~

#### 字段说明

网上找的,不全对。相对详细的可点击[这里](http://patmusing.blog.163.com/blog/static/135834960201101511521145/)

~~~

* ContactsContract.Contacts.TIMES_CONTACTED= "times_contacted" (int) 联系人被联系的次数

* ContactsContract.Contacts.CONTACT_STATUS= "contact_status" (string) 联系人最新的状态

* ContactsContract.Contacts.CUSTOM_RINGTONE= "custom_ringtone" (string uri) 自定义的联系人的铃声,如果没有定义该属性,则使用系统默认的铃声

* ContactsContract.Contacts.HAS_PHONE_NUMBER= "has_phone_number" (0 or1) 如果值为1,则该联系人至少有一个电话号码;如果值为0,则该联系人没有电话号码

* ContactsContract.Contacts.PHONETIC_NAME= "phonetic_name" 拼音样式全称发音

* ContactsContract.Contacts.PHONETIC_NAME_STYLE= "phonetic_name_style" 拼音字母

* ContactsContract.Contacts.CONTACT_STATUS_LABEL= "contact_status_label" (long) 联系人状态标签的ID号

* ContactsContract.Contacts.LOOKUP_KEY= "lookup" (string) 联系人的查询键

* ContactsContract.Contacts.CONTACT_STATUS_ICON= "contact_status_icon" (long) 联系人状态图标的ID号

* ContactsContract.Contacts.LAST_TIME_CONTACTED= "last_time_contacted" (long) 联系人最近被联系的时间

* ContactsContract.Contacts.DISPLAY_NAME= "display_name" (string) 联系人的姓名

* ContactsContract.Contacts.SORT_KEY_ALTERNATIVE= "sort_key_alt" family name first方式的排序

* ContactsContract.Contacts.IN_VISIBLE_GROUP= "in_visible_group" 分组样式

* ContactsContract.Contacts._ID ="_id" (long) 联系人的id

* ContactsContract.Contacts.STARRED= "starred" (int, 0/1) 1表示该联系人是用星号标记的,即favorite的联系人;0表示没有用星号标记

* ContactsContract.Contacts.SORT_KEY_PRIMARY= "sort_key" 本地的排序关键字

* ContactsContract.Contacts.DISPLAY_NAME_ALTERNATIVE= "display_name_alt" 显示名称的另一种表示形式 such as"family name first" instead of "given name first" forWestern names

* ContactsContract.Contacts.CONTACT_PRESENCE= "contact_presence" 联系人呈现出来的状态,如离线、在线、忙碌等状态

* ContactsContract.Contacts.DISPLAY_NAME_SOURCE= "display_name_source" 用于联系人的显示名称的数据类型

* ContactsContract.Contacts.CONTACT_STATUS_RES_PACKAGE= "contact_status_res_package" 包含状态的资源的包:标签和图标。

* ContactsContract.Contacts.CONTACT_STATUS_TIMESTAMP= "contact_status_ts" 插入/更新最新状态的时间

* ContactsContract.Contacts.PHOTO_ID= "photo_id" (long) 联系人头像id

* ContactsContract.Contacts.SEND_TO_VOICEMAIL= "send_to_voicemail" (int,0/1) 如果值为1,则该联系人应该总是被发送到vociemail中,默认值为0

*

~~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值