获取手机通讯录联系人信息

// 获取手机通讯录
public void getPhoneContacts() {
mPhoneContactsList = new ArrayList<Map<String, Object>>();
String phoneNumber;
String displayAddress;
// 得到ContentResolver对象
ContentResolver cr = getContentResolver();
// 取得电话本中开始一项的光标
Cursor cursor = cr.query(ContactsContract.Contacts.CONTENT_URI, null,
null, null, null);
// 向下移动一下光标
cursor.moveToFirst();
while (cursor.moveToNext()) {
Map<String, Object> map = new HashMap<String, Object>();
// 获得联系人的ID号
int idColumn = cursor.getColumnIndex(ContactsContract.Contacts._ID);
String contactId = cursor.getString(idColumn);
// 取得联系人名字
int nameFieldColumnIndex = cursor
.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME);
String disPlayName = cursor.getString(nameFieldColumnIndex);
// 取得电话号码
// 查看该联系人有多少个电话号码。如果没有这返回值为0
int phoneCount = cursor
.getInt(cursor
.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER));

if (phoneCount < 1) {
continue;
}
Cursor phones = getContentResolver().query(
ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
null,
ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = "
+ contactId, null, null);
if (phones.moveToFirst()) {
do {
// 遍历所有的电话号码
phoneNumber = phones
.getString(phones
.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
int phoneType = phones
.getInt(phones
.getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE));
// if (phoneType ==
// ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE) {
// break;
// }
map.put("phoneNumber", phoneNumber);
LogUtil.i(TAG, disPlayName + phoneNumber);
} while (phones.moveToNext());
}
phones.close();
// 查找email地址,这里email也可以有多个
Cursor emails = getContentResolver().query(
ContactsContract.CommonDataKinds.Email.CONTENT_URI,
null,
ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = "
+ contactId, null, null);

while (emails.moveToNext()) {
String emailAddress = emails
.getString(emails
.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA));
map.put("emailAddress", emailAddress);
LogUtil.i(TAG, "emailAddress" + emailAddress + "");
}
emails.close();

// 获得联系人的地址
Cursor address = getContentResolver()

.query(ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_URI,
null,
ContactsContract.CommonDataKinds.StructuredPostal.CONTACT_ID
+ " = " + contactId, null, null);

while (address.moveToNext()) {
// These are all private class variables, don’t forget to create
// them.
String poBox = address
//
.getString(address
.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.POBOX));

String street = address
// 街道号,公寓
.getString(address
.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.STREET));

String city = address
// 城市
.getString(address
.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.CITY));

String state = address
// 省。县
.getString(address
.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.REGION));

String postalCode = address
// 邮编
.getString(address
.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.POSTCODE));

String country = address
// 国家
.getString(address
.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.COUNTRY));

String type = address
.getString(address
.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.TYPE));
displayAddress = (country + city + street).toString();
map.put("displayAddress", displayAddress);
LogUtil.i(TAG, "address" + poBox + "/" + street + "/" + city
+ "/" + state + "/" + postalCode + "/" + country + "/"
+ type);
}
address.close();

map.put("disPlayName", disPlayName);
mPhoneContactsList.add(map);
}
cursor.close();

}



/**
* 获取SIM通讯录 content://icc/fdn content://sim/fdn MOTO XT800比较异常,通讯录在:
* content://contacts/phones
*/
public void getSIMContocts() {
mSIMContactsList = new ArrayList<Map<String, Object>>();
Uri uri = Uri.parse("content://contacts/phones");
LogUtil.i(TAG, "URI" + uri + "");
Cursor cursor = getContentResolver().query(
uri,
null,
null,
null,
ContactsContract.Contacts.DISPLAY_NAME
+ " COLLATE LOCALIZED ASC");
if (cursor != null) {
if (cursor.moveToFirst()) {
Map<String, Object> m = new HashMap<String, Object>();
do {
try {
int displayNameColumn = cursor.getColumnIndex("name");
int phoneColumn = cursor.getColumnIndex("number");
String displayName = cursor
.getString(displayNameColumn);
if (displayName == null) {
continue;
}
String phone = cursor.getString(phoneColumn);
if (phone == null) {
continue;
}
//
m.put("disPlayName", displayName);
m.put("phoneNumber", phone);
mSIMContactsList.add(m);
LogUtil.i(TAG, displayName + phone);
} catch (Exception e) {

e.printStackTrace();
}
} while (cursor.moveToNext());
}

} else {
LogUtil.i(TAG, "Cussor为空");
}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
安卓开发获取手机通讯录信息可以通过ContentResolver和Cursor实现。具体步骤如下: 1.在AndroidManifest.xml文件中添加获取通讯录权限 2.创建ContentResolver对象 3.创建Cursor对象,使用ContentResolver的query()方法查询通讯录数据 4.遍历Cursor对象,获取通讯录数据 下面是一个示例代码: ``` if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED) { //permission not granted, request for permission ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_CONTACTS}, PERMISSION_READ_CONTACTS); }else { //permission granted, read contacts readContacts(); } private void readContacts() { ContentResolver contentResolver = getContentResolver(); Cursor cursor = contentResolver.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null); if (cursor != null && cursor.moveToFirst()) { do { //获取联系人姓名 String name = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)); //获取联系人电话号码 Cursor phoneCursor = contentResolver.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + "=" + cursor.getString( cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone._ID)), null, null); if (phoneCursor != null && phoneCursor.moveToFirst()) { do { String phone = phoneCursor.getString(phoneCursor.getColumnIndex( ContactsContract.CommonDataKinds.Phone.NUMBER)); //处理联系人姓名和电话号码数据 } while (phoneCursor.moveToNext()); phoneCursor.close(); } } while (cursor.moveToNext()); cursor.close(); } } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值