方便快捷读取手机联系人

   大家好,今天晚上我给大家分享的是使用内容提供者读取手机联系人信息,并显示在列表里。现在很多应用都有涉及到读取手机联系人的功能,其实很好操作,根据系统联系人的表字段方可提出数据。因为涉及到个人隐私问题,我就不截图了,相信大家能清晰的想象到显示页面是怎样状况的。


public class MainActivity extends Activity {

//自定义ListView

 private ListView list;

 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);'

  list = (ListView) findViewById(R.id.list);
 //将方法返回的结果保存在ArrayList集合里
  ArrayList<Map<String, String>> data = readContacts();

//创建系统自带自配器SimpleAdapter,

//参数一:上下文,参数二:显示的数据。参数三:资源布局。,参数四:从哪里来 。参数五:到哪里去,到指定控件的Id

  SimpleAdapter adapter = new SimpleAdapter(this, data,
    R.layout.item_list, new String[] { "name", "phone" },
    new int[] { R.id.name_tv, R.id.phone_tv });

//展示适配器数据
  list.setAdapter(adapter);

 }

 //读取联系人方法
 private ArrayList<Map<String, String>> readContacts() {

  ArrayList<Map<String, String>> data = new ArrayList<Map<String, String>>();

//首先,从raw_contacts表中读取联系人的id("contact_id")

//其次,根据contact_id从data表中查询出相应的电话号码,和联系人名称

//然后,根据mimetype来区分那个是联系人,那个是电话号码

//得到raw_contacts的uri
  Uri rawContactUri = Uri
    .parse("content://com.android.contacts/raw_contacts");

//得到data的uri
  Uri dataUri = Uri.parse("content://com.android.contacts/data");

  //通过内容提供者获取手机联系人
  Cursor rawCursor = getContentResolver().query(rawContactUri,
    new String[] {"contact_id" }, null, null, null);


  if (rawCursor != null) {

//游标遍历
   while (rawCursor.moveToNext()) {

//得到游标遍历的第一行数据,就是contact_id的数据
    String contactId = rawCursor.getString(0);

//根据contact_id从data表值查询相应的电话号码和联系人名称,实际查询的是视图view_data
    Cursor dataCursor = getContentResolver().query(dataUri,
      new String[] { "data1", "mimetype" }, "contact_id=?",
      new String[] { contactId }, null);

    if (dataCursor != null) {

//创建集合ma,用来存放数据
     Map<String, String> map = new HashMap<String, String>();

//dataCursor游标遍历
     while (dataCursor.moveToNext()) {

//得到data表中的data1值
      String data1 = dataCursor.getString(0);

//得到data表中的mimetype值
      String mimetype = dataCursor.getString(1);

 //根据mimetype类型判断哪个是电话号码。哪个是联系人
      if ("vnd.android.cursor.item/phone_v2".equals(mimetype)) {

  //把电话号码存放在map集合,key值:phoe
       map.put("phone", data1);

      } else if ("vnd.android.cursor.item/name"
        .equals(mimetype)) {

//把联系人存放在map集合里,key值:name
       map.put("name", data1);

      }

     }
  //添加到ArrayList里
     data.add(map);

//关闭游标
     dataCursor.close();

    }

   }

   rawCursor.close();
  }

//返回data数据

  return data;
 }

}

 通过以上方便快捷的方式就可以读取手机联系人,简单的总结是:获取raw_contacts表中contact_id,然后根据contact_id,获取data表中的data1,mimetype,最后,根据mimetype类型,就可以判断是电话号码还是手机联系人。

恩,今天就到这了。大家睡个好觉。





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
通过使用Android Studio中的内容提供者,我们可以轻松地实现建立手机通讯录界面并读取系统联系人的功能。 首先,我们需要创建一个新的Android项目,并在项目的布局文件中设计通讯录界面。可以包括一个ListView用于显示联系人列表,以及可选的搜索框等组件。 接下来,我们需要编写一个自定义的内容提供者。这个内容提供者将封装我们对系统联系人数据的访问。可以参考Android提供的ContactsContract类,其中包含了通讯录的数据结构和相关的查询方法。 在内容提供者中,我们需要实现读取系统联系人的功能。可以使用ContentResolver的query()方法来执行查询操作,并通过向查询结果Cursor中添加特定的列,来获取我们需要的联系人字段,如姓名、电话号码等。 接着,我们需要在通讯录界面的Activity中使用Loader来加载联系人数据。我们可以使用CursorLoader来实现这一功能,并指定要加载的数据源为我们自定义的内容提供者。 加载完成后,我们将获取到的联系人数据填充到ListView中,以展示联系人列表。可以使用SimpleCursorAdapter来帮助我们将Cursor中的数据绑定到ListView的每一项。 最后,我们可以为通讯录界面的ListView添加点击事件,当用户点击某个联系人时,可以跳转到该联系人的详细信息页面,或执行其他操作。 通过上述步骤,我们可以实现一个简单的手机通讯录界面,并成功读取系统联系人。这样,用户就可以方便地查看、搜索和管理手机通讯录中的联系人信息了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值