手机的联系人信息,存放的位置分为两种。一种存放在手机内存里面,一种是存放在sim卡里面。

他们的访问方式都相似,都是把电话号码和联系人姓名是分开存放在数据库中的,只是访问的uri不同。

本文主要讲的是获取手机内存上的联系人信息。

联系人的姓名和电话号码是分开存放在sqlite数据库中的,我们把.db文件导出来,打开看看。

1.这是联系人信息:

2.电话号码信息:

表之间是通过id来联系的。

访问联系人的uri:

ContactsContract.Contacts.CONTENT_URI

访问电话号码的uri:

ContactsContract.CommonDataKinds.Phone.CONTENT_URI

下面是代码:

public class MainActivity extends BaseActivty {/** 所有的联系人信息 */private Cursor personCur;/** 所有联系人电话号码 */private Cursor numberCur;/** 联系人的信息集合 */private List contactList = new ArrayList();/** listview 组件 */private ListView conListview;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);// 加载组件conListview = (ListView) findViewById(R.id.lv_contact);// 获取手机通讯录信息ContentResolver resolver = this.getContentResolver();// 获取联系人信息personCur = resolver.query(ContactsContract.Contacts.CONTENT_URI, null,null, null, null);// 循环遍历,获取每个联系人的姓名和电话号码while (personCur.moveToNext()) {// 新建联系人对象ContactInfor cInfor = new ContactInfor();// 联系人姓名String cname = "";// 联系人电话String cnum = "";// 联系人id号码String ID;ID = personCur.getString(personCur.getColumnIndex(ContactsContract.Contacts._ID));// 联系人姓名cname = personCur.getString(personCur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));// id的整型数据int id = Integer.parseInt(ID);if (id > 0) {// 获取指定id号码的电话号码Cursor c = resolver.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID+ "=" + ID, null, null);// 遍历游标while (c.moveToNext()) {cnum = c.getString(c.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));}// 将对象加入到集合中cInfor.setcName(cname);cInfor.setcPhone(cnum);contactList.add(cInfor);}}// 新建联系人适配器ContactAdapter conadapter = new ContactAdapter(this, contactList);conListview.setAdapter(conadapter);}}

适配器:

/*** 呈现所有联系人信息的适配器* * @author hongjie* */
public class ContactAdapter extends BaseAdapter {private Context context;private List<ContactInfor> list;/*** 构造器* * @param context* @param list*/public ContactAdapter(Context context, List<ContactInfor> list) {this.context = context;this.list = list;}@Overridepublic int getCount() {// TODO Auto-generated method stubreturn list.size();}@Overridepublic Object getItem(int position) {// TODO Auto-generated method stubreturn position;}@Overridepublic long getItemId(int position) {// TODO Auto-generated method stubreturn position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {// TODO Auto-generated method stub// 当第一次使用,view为空的时候if (convertView == null) {convertView = LayoutInflater.from(context).inflate(R.layout.main_contact, null);}// 获取联系人对象ContactInfor cinfor = list.get(position);// 获取布局组件TextView cname = (TextView) convertView.findViewById(R.id.m_name);TextView cnumber = (TextView) convertView.findViewById(R.id.m_number);// 为组件添加数据cname.setText(cinfor.getcName());cnumber.setText(cinfor.getcPhone());return convertView;}
}

效果:

手机的联系人,电话号码就是四个姓的数字:

运行的结果:

注意:

1.在访问手机联系人的时候,需要添加访问权限:

<!-- 读取联系人的权限 -->
    <uses-permission android:name="android.permission.READ_CONTACTS" />
这是读联系人的权限,如果要改写还得添加写权限:

<uses-permission android:name=”android.permission.WRITE_CONTACTS” />

2.这是query方法原型:

query(Uri uri, String[] projection, String selection,String[] selectionArgs, String sortOrder)projection:是需要读取的字段selection:是数据检索的条件selectionArgs:是数据检索条件的参数sortOrder:是排序的字段

你可以根据自己的需要,传入特定的参数来提高检索的效率。

3.手机sim卡获取联系人的uri:

Uri uri = Uri.parse("content://icc/adn");

获取手机联系人信息(姓名 电话号码)相关推荐

  1. Android基础教程(四)之------获取手机联系人信息

    public void onCreate(Bundle savedInstanceState)  {   TextView tv = new TextView(this);   String stri ...

  2. android 使用内容提供者获取手机联系人

    最近在学习安卓的相关内容, 正好在写获取手机联系人的程序, 就想到了内容提供者, 这里有几点需要注意, 写到这里, 以后方便自己查询. 1. 手机联系人的数据库是存储在 data/data/com.a ...

  3. android 获取phone实例,Android ContentProvider获取手机联系人实例

    在做项目的时候,因为要用到我们自动获取联系人的姓名和电话,就想到了ContentProvider分享数据的功能,这样做既节省了时间,也减少了我们输入错误号码的几率,所以,想在这里把小demo分享给大家 ...

  4. uniapp 调用原生手机联系人和获取手机联系人

    uniapp 调用手机联系人 功能需求描述 一般在设置收货地址/添加联系方式时,可以手动输入,也可以直接获取手机的联系人 方法一:通过HTML5 API中的plus.contacts.ADDRESSB ...

  5. 获取手机联系人的两种方法

    获取手机联系人的两种方法 第一种方法比较简单 就几句话 但是获取的信息不完善 第二种方法比较难 代码比较多 获取的信息全 须要加的权限 : <uses-permission android:na ...

  6. java 获取手机联系人_Android 读取手机联系人、拨号、发送短信及长按菜单的操作...

    本示例实现了读取手机联系人,拨号.发送短信及长按出现菜单选项的操作↓ 1.Andrid项目结构图↓主要操作图中红色方框内的文件. 2.首先布局代码如下↓ a, main.xml 程序运行的主界面,主要 ...

  7. Android内容提供者(读取手机联系人信息)

    工程目录: Manifestes加入读取联系人权限 <uses-permission android:name="android.permission.READ_CONTACTS&qu ...

  8. Android软件开发之获取通讯录联系人信息

    点击打开链接http://blog.csdn.net/snwrking/article/details/7601794 Android软件开发之获取通讯录联系人信息 + android联系人信息的存储 ...

  9. android的contentResolver,contentProvider简介(附带个获取手机联系人及头像实例)

    介绍 android中有个ContentProvider(内容提供者)还有个ContentResolver(内容解析者) 简单来说,contentProvider就是将自己app的数据库共享,使得其他 ...

最新文章

  1. ::operator new、sgi stl alloc、dlmalloc测试结果
  2. Wireshark网卡抓包工具简明教程
  3. 用C#打开文件对话框的方法和简单使用的程序
  4. POJ2826 An Easy Problem?!
  5. NOIP2008pj luoguP1058 立体图 模拟
  6. oracle得oem,Oracle--OEM与常见故障处理
  7. php水印文字方向,ppt文本框文字方向为所有文字旋转的设置方法
  8. PHPEMS +XAMPP 验证码显示不出来解决方法
  9. 初探SEO关键词竞争程度的智能算法思路
  10. (循环串)Periodic Strings UVA - 455
  11. 严版数据结构总结--绪论
  12. udp2raw android,关于udpspeeder和udp2raw部署的一些补充,及使用体会
  13. 【内网穿透】通过WebDAV服务访问群晖NAS文件
  14. 三、Fiddler抓包工具 — Fiddler页面布局之菜单栏
  15. 我们是如何连上WiFi的?
  16. 京东商品评论API接口-(item_review-获得JD商品评论API接口),京东API接口
  17. 数智化转型进入“精装时代”,容联云助力千行百业加速上云用数赋智
  18. Python imp的代替
  19. 转载-TCPDF(目前没有实际操作;先存一份记录)
  20. 第57期、养老院信息管理系统

热门文章

  1. 一位15年资深HR直言:裁掉35岁以上老程序员,早已是公开秘密
  2. Druid连接池实现数据库加密
  3. 浏览器 unload beforunload事件不触发
  4. NachOS线程ID的实现、最大线程数的实现和优先级的添加
  5. uni-app 学习笔记 黑马优购商城
  6. 回望2018,这6家AI+教育公司亮了!| AI最佳掘金案例榜...
  7. 业内人士真心话:只会测试没有前途的,我慌了....
  8. docker教程-docker镜像
  9. CTime 的一般常用方法
  10. 简单的Python五子棋