Api demo源码学习(8)--App/Activity/QuickContactsDemo --获取系统联系人信息
本节通过Content Provider机制获取系统中的联系人信息,注意这个Anctivity直接继承的是ListActivity,所以不再需要setContentView函数来加载布局文件了(我自己新建一个项目来跑这个anctivity时在这里卡了半天)。
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>
转载于:https://www.cnblogs.com/xutao1988/archive/2011/12/14/2288027.html
Api demo源码学习(8)--App/Activity/QuickContactsDemo --获取系统联系人信息相关推荐
- Api demo源码学习(4)--App/Activity/Dialog --Activity以Dialog形式呈现
这一节实际上比 Api demo源码学习(2)--App/Activity/Custom Dialog 自定义Activity样式 还要简单一些,在源码学习(2)里,也是让Activity以Dial ...
- 基于Qt5.14.2和mingw的Qt源码学习(三) — 元对象系统简介及moc工具是如何保存类属性和方法的
基于Qt5.14.2和mingw的Qt源码学习(三) - 元对象系统简介及moc工具是如何保存类属性和方法的 一.什么是元对象系统 1.元对象系统目的 2.实现元对象系统的关键 3.元对象系统的其他一 ...
- Soul API 网关源码学习《二》
基于examples下面的 http服务进行源码解析 前言 上一篇文章Soul API 网关源码解析<一> 中简单介绍了一下网关的含义,同时介绍了两种微服务开发常用的网关:Zuul 1.x ...
- Openshift API部分源码学习笔记(一)
Openshift API简介 Openshift API包含了两部分,一部分是Kubernetes v1 REST API,另一部分是OpenShift v1 REST API,这些RESTful ...
- 2023最新帝国CMS7.5手赚网试玩平台源码/可封装APP+带文章功能系统
正文: 帝国CMS开发的手赚网源码,多平台带文章资讯手机APP试玩网站源码 可自行后台增减平台和链接,和早先几个版本比较的话,这个版本功能更全,版面更为漂亮,有兴趣的自行去安装体验吧,其它就没什么好介 ...
- Neo4j【环境部署 01】图形数据库(简介+下载地址+安装+配置+demo源码+学习教程地址)
1.简介 Neo4j是一个高性能的.NOSQL图形数据库,它将结构化数据存储在网络上而不是表中.它是一个嵌入式的.基于磁盘的.具备完全的事务特性的Java持久化引擎,但是它将结构化数据存储在网络(从数 ...
- 【神经网络-C#】蓝莓、草莓神经网络分类器demo源码学习-理解神经网络
读代码学编程.读代码学理论.读代码学技术.读代码学专业英语 样本数据 蓝莓 草莓(好想吃啊) 训练神经网络-四步 InitializeData();//初始化训练集和测试集InitializeLaye ...
- 博通Broadcom SDK源码学习与开发1——SDK源码探究与Cable Modem 系统编译
声明:原创作品,严禁用于商业目的. 本系列文章将全面剖析以Bcm33xxx芯片开发Cablemodem产品的SDK源码为例,从编译系统到各个功能模块进行分析与探讨. 文章目录 0.写在前篇 1. 博通 ...
- 博通Broadcom SDK源码学习与开发2——Bootloader功能和编译过程
声明:原创作品,严禁用于商业目的. 本系列文章将全面剖析以Bcm33xxx芯片开发Cablemodem产品的SDK源码为例,从编译系统到各个功能模块进行分析与探讨. 文章目录 0.写在前篇 0.写在前 ...
最新文章
- 2018阿里客户顾问
- 将不确定变为确定~整形变量是否可以进行位运算(像枚举类型一样)
- DeepLearning:windows环境下C++环境实现Tensorflow编译部署
- SpringBoot笔记:SpringBoot集成MinIO分布式文件系统
- Coursera吴恩达《序列模型》课程笔记(3)-- Sequence models Attention mechanism
- 25个吸引眼球的广告设计
- 207. Course Schedule 课程表
- Windows新终端中玩转ASCII和Emoji游戏的正确姿势
- 基于深度学习的IRS辅助MIMO通信系统的CSI压缩及恢复研究
- go写的图片爬虫,支持单页以及列表
- ffmpeg windows版本交叉编译方法
- oppo手机删了android怎么办,OPPO手机越用越卡?1删除这4个僵尸文件夹,流畅如新机...
- Web 应用程序渗透测试清单
- Ubuntu18.04安装cmake(附免费下载cmake)。
- 如何看药博士系统服务器的站点,药博士系列管理软件
- 伍斯特学院计算机专业排名,美国大学计算机专业排名!
- C002-CPP-语法与用法摘录-(ques=0)
- 简洁好用的数据库表结构文档生成工具screw
- Encoded password does not look like BCrypt 异常问题
- c语言 x16 x15 x2 1,CRC算法原理及C语言实现
热门文章
- 返回路径平面上的间隙_裁切机的上刀下刀如何调整?
- int类型存小数 mysql_MySQL基本数据类型
- 用C/C++开发《Photoshop》图像处理软件
- java 文件封装_Java 封装
- qq数据泄露_真良心,腾讯这个app竟然能查账号泄露
- python中函数参数_Python函数的参数
- 通达信缠论买卖点公式_通达信缠论多空主图指标公式
- rto净化效率计算公式_你了解废气处理设备RTO蓄热式热氧化炉的工作原理么?
- html5 css svg,6款基于SVG的HTML5CSS3应用和动画
- 【渝粤教育】 国家开放大学2020年春季 1190当代中国政治制度 参考试题