内容访问者之获取联系人

这是效果图,如图所示,拿到了用户名和电话号码,废话少说进入主题吧!


首先我们来分析下布局,我用的是listview来展示信息的,觉得样式丑又有心的小伙伴可以自己动手改哦,毕竟我

主要讲的是如何实现访问系统的联系人


我们要访问手机的联系人,第一步当然是权限啦!!!

       

<uses-permission android:name="android.permission.READ_CONTACTS"></uses-permission>

有了权限就好办多了,我们再次分析,看图,我们既然要用listview展示联系人,编号,电话号码,可以想到

肯定需要适配器,那么用什么适配器呢?ArrayAdapter适配器是不合适的,我们肯定是

SimpleAdapter了.


在使用适配之前我们要先解决数据源的问题


List<Map<String,String>> list=new ArrayList<Map<String, String>>();
得到内容访问者的uri,不然怎么知道你要去哪拿数据呢、
Uri uri=Uri.parse("content://com.android.contacts/raw_contacts");
Cursor cursor=cr.query(uri,null,null,null,null);

联系人可能不止一个,so....
while (cursor.moveToNext()){

Map<String,String> map=new HashMap<String,String>();

     拿到id
    int id=cursor.getInt(cursor.getColumnIndex("_id"));
     
    所有联系人
    String name=cursor.getString(cursor.getColumnIndex("display_name"));

    String pid=""+id;
   map.put("id",pid);
    map.put("name",name);

  我们的id是int类型的,所有需要转型,在这给大家分享几种类型装换的

          1 如何将字串 String 转换成整数 int?
         A. 有两个方法:
          1). int i = Integer.parseInt([String]); 
i = Integer.parseInt([String],[int radix]);

            2). int i = Integer.valueOf(my_str).intValue();

           注: 字串转成 Double, Float, Long 的方法大同小异.

           2 如何将整数 int 转换成字串 String ?

                   A. 有叁种方法:

                   1.) String s = String.valueOf(i);

           2.) String s = Integer.toString(i);

           3.) String s = "" + i;

           注: Double, Float, Long 转成字串的方法大同小异.


   其实在手机存储里,联系人姓名和电话号码是存在着一种类似联表关系的不同表中,

 所以,我们在上面为什么没拿电话号码,就解释的通了.

content://是我们需要的一个协议,和http协议类似

Uri uriData=Uri.parse("content://com.android.contacts/raw_contacts/"+id+"/data");
Cursor cursorData=cr.query(uriData,null,null,null,null);

 String data1=cursorData.getString(cursorData.getColumnIndex("data1"));
map.put("data1",data1);
          跟拿联系人名字一样

list.add(map);
再把map数据放入list集合,我们就解决数据源的问题了


SimpleAdapter simpleAdapter=new SimpleAdapter(
        this,//上下文
        lists,//数据源
        R.layout.item,//布局文件
        new String[]{"id","name","data1"},//数据从哪来
        new int[]{R.id.tv_item1,R.id.tv_item2,R.id.tv_item3});//数据放到哪去
//绑定适配器
lv_main_1.setAdapter(simpleAdapter);


总体来说还好,不是很复杂




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值