赞
踩
这是效果图,如图所示,拿到了用户名和电话号码,废话少说进入主题吧!
首先我们来分析下布局,我用的是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);
总体来说还好,不是很复杂
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。