android 获取手机通讯录信息

博客分类: android
Android代码获得通讯录
protected void getContactInfo() {
//获得通讯录信息 ,URI是ContactsContract.Contacts.CONTENT_URI
Cursor cursor = getContentResolver().query(
ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
while (cursor.moveToNext()) {
//获得通讯录中每个联系人的ID
String contactId = cursor.getString(cursor
.getColumnIndex(ContactsContract.Contacts._ID));
//获得通讯录中联系人的名字
String name = cursor
.getString(cursor
.getColumnIndexOrThrow(ContactsContract.Contacts.DISPLAY_NAME));
Log.v(TAG, "…name…" + name);
//查看给联系人是否有电话,返回结果是String类型,1表示有,0表是没有
String hasPhone = cursor
.getString(cursor
.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER));
if (hasPhone.equalsIgnoreCase("1"))
hasPhone = "true";
else
hasPhone = "false";
//如果有电话,根据联系人的ID查找到联系人的电话,电话可以是多个
if (Boolean.parseBoolean(hasPhone)) {
Cursor phones = getContentResolver().query(
ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
null,
ContactsContract.CommonDataKinds.Phone.CONTACT_ID
+ " = " + contactId, null, null);
while (phones.moveToNext()) {
String phoneNumber = phones
.getString(phones
.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
Log.v(TAG, "…phoneNumber… " + phoneNumber);
}
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));
Log.v(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));
Log.v(TAG, "…city… " + city);
}
}
cursor.close();
}




另一种方法

1。通讯录上的信息,存储在两个地方,一个是SIM卡,一个是手机本地,
首先是手机本地:Cursor cursor = getContentResolver().query(People.CONTENT_URI, null,
null, null, null);
while (cursor.moveToNext()) {
ContactInfo cci = new ContactInfo();
//取得联系人名字
int nameFieldColumnIndex = cursor.getColumnIndex(People.NAME);
cci.contactName = cursor.getString(nameFieldColumnIndex);
//取得电话号码
int numberFieldColumnIndex = cursor.getColumnIndex(People.NUMBER);
cci.userNumber = cursor.getString(numberFieldColumnIndex);
cci.userNumber = GetNumber(cci.userNumber);
cci.isChecked = false;
if (IsUserNumber(cci.userNumber)) {
if (!IsContain(contactList, cci.userNumber)) {
if(IsAlreadyCheck(wNumStr, cci.userNumber)){
cci.isChecked = true;
numberStr += "," + cci.userNumber;
}
contactList.add(cci);
//Log.i("eoe", "*********"+cci.userNumber);
}
}
}
cursor.close();
}
下面是获取SIM卡:
//从SIM卡中取号
private void GetSimContact(String add){
//读取SIM卡手机号,有两种可能:content://icc/adn与content://sim/adn
try {
Intent intent = new Intent();
intent.setData(Uri.parse(add));
Uri uri = intent.getData();
mCursor = getContentResolver().query(uri, null, null, null, null);
if (mCursor != null) {
while (mCursor.moveToNext()) {
ContactInfo sci = new ContactInfo();
// 取得联系人名字
int nameFieldColumnIndex = mCursor.getColumnIndex("name");
sci.contactName = mCursor.getString(nameFieldColumnIndex);
// 取得电话号码
int numberFieldColumnIndex = mCursor
.getColumnIndex("number");
sci.userNumber = mCursor.getString(numberFieldColumnIndex);
sci.userNumber = GetNumber(sci.userNumber);
sci.isChecked = false;

if (IsUserNumber(sci.userNumber)) {
if (!IsContain(contactList, sci.userNumber)) {
if(IsAlreadyCheck(wNumStr, sci.userNumber)){
sci.isChecked = true;
numberStr += "," + sci.userNumber;
}
contactList.add(sci);
//Log.i("eoe", "*********"+sci.userNumber);
}
}
}
mCursor.close();
}
} catch (Exception e) {
Log.i("eoe", e.toString());
}
}
以上是将获取到的信息对象方法ArrayList<ContactInfo> contactList里面,然后砸显示的是采用适配器,这样就完成了
在写的时候,一定要注意获取的方式

更多相关文章

  1. Android联系人3--联系人分组相关
  2. 仿Android6.0联系人列表
  3. Android android下的电话拨号器
  4. Android 删除手机联系人,添加手机联系人,更新手机联系人信
  5. Android实现打电话功能
  6. Android(AIDL)自动重复拨号及挂断/接听电话
  7. android 1.6 联系人

随机推荐

  1. 主界面监听返回键,退出程序
  2. android MotionEvent的相关的类的介绍
  3. Ubuntu 下android 开发遇到的各种问题
  4. Android初级教程启动定时器详解
  5. android developer 打不开 解决办法
  6. 日常收集的Android开发资料来源
  7. Android 字符串格式化 千位符
  8. android button自定义触摸前以及触摸时的
  9. android获取文件目录
  10. Android代码实现APK文件的安装与卸载