Android ContentProvider获取手机联系人实例
在做项目的时候,因为要用到我们自动获取联系人的姓名和电话,就想到了ContentProvider分享数据的功能,这样做既节省了时间,也减少了我们输入错误号码的几率,所以,想在这里把小demo分享给大家,方便以后要用的时候可以看看 我们先看下获取所有联系人的方式,把所有联系人展示在listView上 public void getLinkMan(View view){ //获取联系人 Uri uri=Uri.parse(content://com.android.contacts/raw_contacts); cursor = cr.query(uri,null, 在Android开发中,ContentProvider是Android四大组件之一,它负责管理应用程序间的数据共享。当我们需要在不同的应用之间共享数据,比如获取手机联系人时,ContentProvider就显得尤为重要。本实例将详细讲解如何通过ContentProvider获取手机联系人的姓名和电话,并展示在ListView上。 我们需要获取到所有联系人的信息。在`getLinkMan`方法中,我们通过`Uri.parse("content://com.android.contacts/raw_contacts")`创建了一个URI,这个URI指向了系统的联系人提供者。接着,使用`ContentResolver`的`query`方法来查询联系人数据。这里的`null`参数表示我们不指定特定的列,`null`作为`selection`参数表示我们选择所有记录,`null`作为`selectionArgs`参数表示没有额外的筛选条件,`null`作为`sortOrder`参数表示按默认顺序排列。 ```java Uri uri = Uri.parse("content://com.android.contacts/raw_contacts"); Cursor cursor = cr.query(uri, null, null, null, null); ``` 遍历`cursor`,我们可以获取到每个联系人的ID(`_id`),姓名(`display_name`)和电话号码(`number`)。由于电话号码存储在联系人数据项中,所以我们需要再次调用`query`方法,这次针对的是每个联系人的数据项(`data`表): ```java Uri uriData = Uri.parse("content://com.android.contacts/raw_contacts/" + id + "/data"); Cursor cursorData = cr.query(uriData, null, null, null, null); ``` 在`cursorData`的循环中,我们检查`mimetype`列,如果类型为`"vnd.android.cursor.item/phone_v2"`,则表示这是一个电话号码。然后将这些信息存入一个HashMap,再添加到列表中。 ```java if ("vnd.android.cursor.item/phone_v2".equals(type)) { Log.i("test", " " + data1 + ":" + type); Map<String, Object> map = new HashMap<>(); map.put("id", id); map.put("name", name); map.put("number", number); list.add(map); } ``` 通过`SimpleAdapter`将数据绑定到ListView上,以便用户查看。 在实际的应用场景中,我们可能还需要处理用户从系统联系人选择界面返回后的数据。这可以通过重写`onActivityResult`方法实现,如下所示: ```java @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { switch (requestCode) { case 0: if (data == null) // 判断返回的数据 return; // 获取选择的联系人信息 Uri uri = data.getData(); String[] contact = getPhoneContacts(uri); Map<String, Object> map = new HashMap<>(); map.put("name", contact[0]); map.put("number", contact[1]); list.clear(); list.add(map); adapter.notifyDataSetChanged(); break; } } ``` 这里,`ACTION_PICK`意图用于启动系统联系人选择界面,`onActivityResult`会接收到用户选择的联系人信息,然后更新ListView。 总结起来,Android ContentProvider是实现跨应用数据共享的关键组件,通过ContentResolver的query方法可以获取到系统提供的联系人数据。在实际应用中,我们不仅要学会如何查询和解析数据,还要考虑如何处理用户的选择,以便为用户提供流畅的交互体验。通过上述步骤,你可以成功地从Android手机中获取联系人信息并显示在ListView上。
- 粉丝: 4
- 资源: 910
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助