本节通过Content Provider机制获取系统中的联系人信息,注意这个Anctivity直接继承的是ListActivity,所以不再需要setContentView函数来加载布局文件了(我自己新建一个项目来跑这个anctivity时在这里卡了半天)。

在AndroidManifest.xml中需配置权限,以访问手机中的联系人信息,添加如下代码:
<uses-permission android:name="android.permission.READ_CONTACTS"></uses-permission>
具体解释放入代码中。
 1 public class QuickContactsDemo extends ListActivity { 2         3        //设置要从联系人数据库中要查找的数据 4     static final String[] CONTACTS_SUMMARY_PROJECTION = new String[] { 5             Contacts._ID, // 0 6             Contacts.DISPLAY_NAME, // 1 7             Contacts.STARRED, // 2 8             Contacts.TIMES_CONTACTED, // 3 9             Contacts.CONTACT_PRESENCE, // 410             Contacts.PHOTO_ID, // 511             Contacts.LOOKUP_KEY, // 612             Contacts.HAS_PHONE_NUMBER, // 713     };14 15     static final int SUMMARY_ID_COLUMN_INDEX = 0;16     static final int SUMMARY_NAME_COLUMN_INDEX = 1;17     static final int SUMMARY_STARRED_COLUMN_INDEX = 2;18     static final int SUMMARY_TIMES_CONTACTED_COLUMN_INDEX = 3;19     static final int SUMMARY_PRESENCE_STATUS_COLUMN_INDEX = 4;20     static final int SUMMARY_PHOTO_ID_COLUMN_INDEX = 5;21     static final int SUMMARY_LOOKUP_KEY = 6;22     static final int SUMMARY_HAS_PHONE_COLUMN_INDEX = 7;23 24 25     @Override26     public void onCreate(Bundle savedInstanceState) {27         super.onCreate(savedInstanceState);28        29         //设置通过uri要查询的语句30         String select = "((" + Contacts.DISPLAY_NAME + " NOTNULL) AND ("31                 + Contacts.HAS_PHONE_NUMBER + "=1) AND ("32                 + Contacts.DISPLAY_NAME + " != '' ))";33        34         //通过ContentResolver的query函数,传入联系人的URI :Contacts.CONTENT_URI查询所需信息,最后一个参数决定按照联系人的姓名进行降序排列35         Cursor c =36                 getContentResolver().query(Contacts.CONTENT_URI, CONTACTS_SUMMARY_PROJECTION, select,37                 null, Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC");38        39         //一个cursor使用完毕后需将其关闭,cursor.close()。如果不想自己管理cursor,40 //可调用下面的startManagingCursor语句让系统自行管理,cursor会在程序结束时自动释放41         startManagingCursor(c);42        43         ContactListItemAdapter adapter = new ContactListItemAdapter(this, R.layout.quick_contacts, c);44         setListAdapter(adapter);45 46     }47 48     private final class ContactListItemAdapter extends ResourceCursorAdapter {49         public ContactListItemAdapter(Context context, int layout, Cursor c) {50             super(context, layout, c);51         }52        53        54         //重写bindView方法,设置每个ListView内每一个view的值55         @Override56         public void bindView(View view, Context context, Cursor cursor) {57             final ContactListItemCache cache = (ContactListItemCache) view.getTag();58             TextView nameView = cache.nameView;59             QuickContactBadge photoView = cache.photoView;60             // Set the name61             cursor.copyStringToBuffer(SUMMARY_NAME_COLUMN_INDEX, cache.nameBuffer);62             int size = cache.nameBuffer.sizeCopied;63             cache.nameView.setText(cache.nameBuffer.data, 0, size);64             final long contactId = cursor.getLong(SUMMARY_ID_COLUMN_INDEX);65             final String lookupKey = cursor.getString(SUMMARY_LOOKUP_KEY);66             cache.photoView.assignContactUri(Contacts.getLookupUri(contactId, lookupKey));67         }68 69         @Override70         public View newView(Context context, Cursor cursor, ViewGroup parent) {71             View view = super.newView(context, cursor, parent);72             ContactListItemCache cache = new ContactListItemCache();73             cache.nameView = (TextView) view.findViewById(R.id.name);74             cache.photoView = (QuickContactBadge) view.findViewById(R.id.badge);75             view.setTag(cache);76 77             return view;78         }79     }80 81     final static class ContactListItemCache {82         public TextView nameView;83         public QuickContactBadge photoView;84         public CharArrayBuffer nameBuffer = new CharArrayBuffer(128);85     }86 }

quick_contacts.xml布局文件:

 1 <RelativeLayout 2 xmlns:android="http://schemas.android.com/apk/res/android" 3     android:layout_width="fill_parent" 4     android:paddingLeft="0dip" 5     android:paddingRight="9dip" 6     android:layout_height= "wrap_content" 7     android:minHeight="48dip"> 8  9     <QuickContactBadge10 android:id="@+id/badge"11         android:layout_marginLeft="2dip"12         android:layout_marginRight="14dip"13         android:layout_marginTop="4dip"14         android:layout_marginBottom="3dip"15         android:layout_alignParentLeft="true"16         android:layout_alignParentTop="true"17         android:layout_height= "wrap_content"18         android:layout_width= "wrap_content"19         android:src="@drawable/ic_contact_picture"20         style="?android:attr/quickContactBadgeStyleWindowSmall" />21 22     <TextView23 android:id="@+id/name"24         android:textAppearance="?android:attr/textAppearanceMedium"25         android:paddingLeft="2dip"26         android:layout_centerVertical="true"27         android:layout_toRightOf="@id/badge"28         android:layout_width="fill_parent"29         android:layout_height="wrap_content" />30 31 </RelativeLayout>

以上即可。
下一节:Api demo源码学习(9)--App/Activity/Receive Result --Activity间传递数据

转载于:https://www.cnblogs.com/xutao1988/archive/2011/12/14/2288027.html

Api demo源码学习(8)--App/Activity/QuickContactsDemo --获取系统联系人信息相关推荐

  1. Api demo源码学习(4)--App/Activity/Dialog --Activity以Dialog形式呈现

    这一节实际上比 Api demo源码学习(2)--App/Activity/Custom Dialog 自定义Activity样式  还要简单一些,在源码学习(2)里,也是让Activity以Dial ...

  2. 基于Qt5.14.2和mingw的Qt源码学习(三) — 元对象系统简介及moc工具是如何保存类属性和方法的

    基于Qt5.14.2和mingw的Qt源码学习(三) - 元对象系统简介及moc工具是如何保存类属性和方法的 一.什么是元对象系统 1.元对象系统目的 2.实现元对象系统的关键 3.元对象系统的其他一 ...

  3. Soul API 网关源码学习《二》

    基于examples下面的 http服务进行源码解析 前言 上一篇文章Soul API 网关源码解析<一> 中简单介绍了一下网关的含义,同时介绍了两种微服务开发常用的网关:Zuul 1.x ...

  4. Openshift API部分源码学习笔记(一)

    Openshift API简介 Openshift API包含了两部分,一部分是Kubernetes v1 REST API,另一部分是OpenShift v1 REST API,这些RESTful ...

  5. 2023最新帝国CMS7.5手赚网试玩平台源码/可封装APP+带文章功能系统

    正文: 帝国CMS开发的手赚网源码,多平台带文章资讯手机APP试玩网站源码 可自行后台增减平台和链接,和早先几个版本比较的话,这个版本功能更全,版面更为漂亮,有兴趣的自行去安装体验吧,其它就没什么好介 ...

  6. Neo4j【环境部署 01】图形数据库(简介+下载地址+安装+配置+demo源码+学习教程地址)

    1.简介 Neo4j是一个高性能的.NOSQL图形数据库,它将结构化数据存储在网络上而不是表中.它是一个嵌入式的.基于磁盘的.具备完全的事务特性的Java持久化引擎,但是它将结构化数据存储在网络(从数 ...

  7. 【神经网络-C#】蓝莓、草莓神经网络分类器demo源码学习-理解神经网络

    读代码学编程.读代码学理论.读代码学技术.读代码学专业英语 样本数据 蓝莓 草莓(好想吃啊) 训练神经网络-四步 InitializeData();//初始化训练集和测试集InitializeLaye ...

  8. 博通Broadcom SDK源码学习与开发1——SDK源码探究与Cable Modem 系统编译

    声明:原创作品,严禁用于商业目的. 本系列文章将全面剖析以Bcm33xxx芯片开发Cablemodem产品的SDK源码为例,从编译系统到各个功能模块进行分析与探讨. 文章目录 0.写在前篇 1. 博通 ...

  9. 博通Broadcom SDK源码学习与开发2——Bootloader功能和编译过程

    声明:原创作品,严禁用于商业目的. 本系列文章将全面剖析以Bcm33xxx芯片开发Cablemodem产品的SDK源码为例,从编译系统到各个功能模块进行分析与探讨. 文章目录 0.写在前篇 0.写在前 ...

最新文章

  1. 2018阿里客户顾问
  2. 将不确定变为确定~整形变量是否可以进行位运算(像枚举类型一样)
  3. DeepLearning:windows环境下C++环境实现Tensorflow编译部署
  4. SpringBoot笔记:SpringBoot集成MinIO分布式文件系统
  5. Coursera吴恩达《序列模型》课程笔记(3)-- Sequence models Attention mechanism
  6. 25个吸引眼球的广告设计
  7. 207. Course Schedule 课程表
  8. Windows新终端中玩转ASCII和Emoji游戏的正确姿势
  9. 基于深度学习的IRS辅助MIMO通信系统的CSI压缩及恢复研究
  10. go写的图片爬虫,支持单页以及列表
  11. ffmpeg windows版本交叉编译方法
  12. oppo手机删了android怎么办,OPPO手机越用越卡?1删除这4个僵尸文件夹,流畅如新机...
  13. Web 应用程序渗透测试清单
  14. Ubuntu18.04安装cmake(附免费下载cmake)。
  15. 如何看药博士系统服务器的站点,药博士系列管理软件
  16. 伍斯特学院计算机专业排名,美国大学计算机专业排名!
  17. C002-CPP-语法与用法摘录-(ques=0)
  18. 简洁好用的数据库表结构文档生成工具screw
  19. Encoded password does not look like BCrypt 异常问题
  20. c语言 x16 x15 x2 1,CRC算法原理及C语言实现

热门文章

  1. 返回路径平面上的间隙_裁切机的上刀下刀如何调整?
  2. int类型存小数 mysql_MySQL基本数据类型
  3. 用C/C++开发《Photoshop》图像处理软件
  4. java 文件封装_Java 封装
  5. qq数据泄露_真良心,腾讯这个app竟然能查账号泄露
  6. python中函数参数_Python函数的参数
  7. 通达信缠论买卖点公式_通达信缠论多空主图指标公式
  8. rto净化效率计算公式_你了解废气处理设备RTO蓄热式热氧化炉的工作原理么?
  9. html5 css svg,6款基于SVG的HTML5CSS3应用和动画
  10. 【渝粤教育】 国家开放大学2020年春季 1190当代中国政治制度 参考试题