Andtroid:PhoneLookup.NUMBER----ContactsContract类Android 2.0 API 关于获取电话本联系人

Andtroid:PhoneLookup.NUMBER----ContactsContract类Android 2.0 API

 

 
PhoneLookup.NUMBER----ContactsContract类Android 2.0 API改变
 

原来要读取系统联系人的信息只要如下代码即可实现

  1. Cursor people = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
  2. while(people.moveToNext())
  3. {
  4. int nameFieldColumnIndex = people.getColumnIndex(PhoneLookup.DISPLAY_NAME);
  5. String contact = people.getString(nameFieldColumnIndex);
  6. int numberFieldColumnIndex = people.getColumnIndex(PhoneLookup.NUMBER);
  7. String number = people.getString(numberFieldColumnIndex);
  8. }
  9. people.close();

其中红色加粗部分为获取系统联系人电话号码代码。但如果你使用的是2.0或2.0以上的API那么程序将提示出错。

在网上找找了找资料解决方法如下

String string="";
ContentResolver cr = getContentResolver();

Cursor cursor = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);

while (cursor.moveToNext())
{

int nameFieldColumnIndex = cursor.getColumnIndex(PhoneLookup.DISPLAY_NAME);
String strName = cursor.getString(nameFieldColumnIndex);
string += strName;
string += ":";

String contactId = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID)); //获取联系人的ID号,在SQLite中的数据库ID
Cursor phone = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = "
+ contactId, null, null);

while (phone.moveToNext())
{
String strPhoneNumber = phone.getString(phone.getColumnIndex (ContactsContract.CommonDataKinds.Phone.NUMBER)); //手机号码字段联系人可能不止一个

string += strPhoneNumber;
}

string += "\n";
phone.close();
}
cursor.close();

可以看到,获取名字的方法依然一样,但是要获取手机号码就只能通过先取得联系人ID然后再取得联系人手机号码了。

 

 

关于添加权限:

 

    android:name="android.permission.READ_CONTACTS">
         </uses-permission>

 

 

以前在Android中的AndroidManifest.xml中配置各项权限时,<uses-permission/>的位置都是放在<application></application>标签之后的,现在也是把<uses-permission/>放在<application></application>之后,但是出现一个warning,提示<uses-permission> tag appears after <application> tag, 不知道在哪个版本出现之后,<uses-permission>必须放在<application>之前了.

posted @ 2013-12-11 15:04  代码缔造的帝国  阅读(221)  评论(0编辑  收藏  举报