Android读取手机的联系人

首先我们使用的虚拟机里的电话簿里没有任何的联系人,所以需要我们通过点击ADD A CONTACT来添加一些联系人,分别输入他们的姓名和手机号;

准备工作做好之后,我们希望读出来的联系人的信息能在ListView中显示,因此我们需要修改android_main.xml中的代码:

Android读取手机的联系人_第1张图片

简单起见,我们这里在LinearLayout里只放了一个ListView,这里使用的是ListView而不是RecycleView,是因为我们将关注的重点放在了读取联系人上面,如果使用RecycleView,代码偏多,容易找不到重点;

接下来我们修改MainActivity中的代码,如下所示:

Android读取手机的联系人_第2张图片Android读取手机的联系人_第3张图片

这样MainActivity中得代码就是写完了,分析:

在onCreat()的方法中我们首先获得了ListView控件的实例,并给他设置好了适配器,然后就开始调用运行时的权限处理逻辑。因为READ_CONTACTS权限所示属于危险的权限的,这里我们的用户在授权之后调用readContacts()方法来读取系统联系人的信息;

下面重点看一下readContacts()方法。可以看到,这里使用了ContenetResolver的query()方法来查询系统的联系人的数据,不过传入的Uri参数有些奇怪,为什么没有调用Uri.parse()方法去解析一个内容URI的字符串呢,这是因为ContactsContaract.CommonDataKinds.Phone()类已经帮我们做好了封装,提供了一个CONTENT_URI常量,而这个常量就是使用Uri.parse()方法解析出来的结果,接着我们对Cursor对象进行遍历,将联系人的姓名和手机号的这些数据逐个取出,联系人姓名这列对应的常量是ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,而联系人手机号对应的这列是ContactsContract.CommonDataKinds.Phone.NUMBER,连个数据都取出之后,。将他们进行拼接,并且在两个中间加上换行符,然后后将凭借后的数据添加到ListView中的数据源中,并通知刷新一下ListView.租后不要忘记将Cursor的对象关闭。

最后一步,就是将读取联系人的权限加上,这个是最重要的一步;我们需要在AndroidManifest.xml中添加以下的代码:

Android读取手机的联系人_第4张图片

这样我们的编码就结束了,接下来进行运行虚拟机,首先它会询问是否申请访问手机联系人的权限的对话框,我们选择ALLOW,然后就可以读取联系人的姓名和电话了;

效果如下:

Android读取手机的联系人_第5张图片Android读取手机的联系人_第6张图片

你可能感兴趣的:(Android开发)