从Android 2.0 SDK开始有关联系人provider的类变成了ContactsContract,虽然老的android.provider.Contacts能用,但是在SDK中标记为为deprecated将被放弃不推荐的方法,而从Android 2.0及API Level为5开始新增了android.provider.ContactsContract来代替原来的方法。

ContactsContract的子类ContactsContract.Contacts是一张表,代表了所有联系人的统计信息。比如联系人ID(—ID),查询键(LOOKUP_KEY),联系人的姓名(DISPLAY_NAME_PRIMARY),头像的id(PHOTO_ID)以及群组的id等等。

我们可以通过以下的方法取得所有联系人的表的Cursor对象:

1)ContentResolver contentResolver=getContentResolver();//获取ContentResolver对象查询在ContentProvider里定义的共享对象;

2)Cursor cursor=contentResolver.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);//根据URI对象ContactsContract.Contacts.CONTENT_URI查询所有联系人;

从Cursor对象里我们关键是要取得联系人的_id。通过它,再通过ContactsContract.CommonDataKinds的各个子类查询该_id联系人的电话(ContactsContract.CommonDataKinds.Phone),email(ContactsContract.CommonDataKinds.Email)等等。

以取得该联系人所有电话为例:

1)int idFieldIndex=cursor.getColumnIndex(ContactsContract.Contacts._ID);

int id=cursor.getInt(idFieldIndex);//根据列名取得该联系人的id;

2)Cursor phonecursor=contentResolver.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID+"=?", new String[]{Integer.toString(id)}, null);//再类ContactsContract.CommonDataKinds.Phone中根据查询相应id联系人的所有电话;

类似地可以ContactsContract.CommonDataKinds的不同的子类查询不同的内容。android文档告诉我们推荐使用ContactsContract.Contacts.LOOKUP_KEY代替ContactsContract.Contacts._ID。

最后,由于读取联系人比较的占用资源,为了提高用户的体验度。考虑将读取的过程放在线程里完成,推荐使用AsyncTask类。



更多相关文章

  1. Android(安卓)技巧记录
  2. Android(安卓)SQLite数据库操作实例
  3. Android获取联系人
  4. Android(安卓)调用联系人列表,选择联系人
  5. Android(安卓)联系人的增删修改
  6. Android(安卓)Fragment 简洁版 list
  7. Android联系人1--分组查询
  8. Android(安卓)通信录中的联系人操作
  9. android多选联系人实现

随机推荐

  1. Android(安卓)使用ExoPlayer视频播放 (一)
  2. [置顶] android6.0源码分析之Activity启
  3. 线性布局分割
  4. 【Android(安卓)Developers Training】 8
  5. 【 Android(安卓)10 系统启动 】系列 --
  6. [Android]如何创建一个View的分割线
  7. Android中的菜单OptionsMenu,ContextMenu
  8. 初学Android,字符串,数字,尺寸,数组资源(
  9. ReactNative D8 Cannot fit requested cl
  10. Android(安卓)一键直接查看Sqlite数据库