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

本节通过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, // 4
10 Contacts.PHOTO_ID, // 5
11 Contacts.LOOKUP_KEY, // 6
12 Contacts.HAS_PHONE_NUMBER, // 7
13 };
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 @Override
26 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 @Override
56 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 name
61 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 @Override
70 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 <QuickContactBadge
10 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 <TextView
23 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/361791.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

游戏大厅 从基础开始(6)--绕回来细说聊天室(中)之女仆编年史1

上一篇我们大致的了解了几种聊天室的行为模式 最简单明了的推模式 几乎不需要任何多余的语言来描述它的实现 这一篇我们看看如何实现拉模式更有效。 本图清晰的表现了"拉"模式聊天室的行为。 并发多用户向数据池写数据 并发多用户从数据池读书据 数据最好以时间为…

开发自上而下的Web服务项目

这是从Alessio Soldano编辑的Advanced JAX-WS Web Services手册中摘录的示例章节。 第一章介绍了自底向上创建Web服务端点的方法。 它允许非常快地将现有bean作为Web Service端点公开&#xff1a;在大多数情况下&#xff0c;将类转换为端点只需在代码中添加少量注释即可。 但…

React中ref的使用方法

React中ref的使用方法 在react典型的数据流中&#xff0c; props传递是父子组件交互的唯一方式&#xff1b;通过传递一个新的 props值来使子组件重新 re-render,从而达到父子组件通信。当然&#xff0c;就像react官网所描述的一样&#xff0c;在react典型的数据量之外&#xff…

mediawiki自动生成sitemap

Mediawiki 1.17.0提供了generateSitemap.php生成sitemap文件&#xff0c;可不必再使用扩展。 每次调用generateSitemap.php&#xff0c;生成全部sitemap。一般是通过定时任务(Linux下是cron)调用&#xff0c;定时生成。 generateSitemap.php命令示例&#xff1a; php /wiki/mai…

垃圾收集:提高吞吐量

这篇文章的灵感来自于在内存管理术语中的“ Pig in the Python ”定义。 显然&#xff0c;该术语用于解释GC反复促进大对象世代相传的情况。 据推测&#xff0c;这样做的效果类似于Python吞下整个猎物&#xff0c;只是在消化过程中被固定住了。 在接下来的24小时里&#xff0c…

Scss基础用法

Scss基础用法 一、注释用法&#xff1a; &#xff08;1&#xff09;//comment&#xff1a;该注释只是在.scss源文件中有&#xff0c;编译后的css文件中没有。 &#xff08;2&#xff09;/! /&#xff1a;重要注释&#xff0c;任何style的css文件中都会有&#xff0c;一般放置…

(Joomla)字符串截取

在用joomla进行开发的时候&#xff0c;需要用到国外的资源&#xff0c;一些module&#xff0c;组件&#xff0c;插件之类的&#xff0c;但是我们会发现&#xff0c;在字符串这个方法都需要进行修改。因为PHP的substr方法只是针对于非中文字符串有效&#xff0c;所以要使用另外一…

Pyechart:30分钟学会pyecharts数据可视化

30分钟学会pyecharts数据可视化 小红&#xff1a;你先跟我说说什么是pyecharts吧。 小明&#xff1a;Echarts 是一个由百度开源的数据可视化javascript库&#xff0c;凭借着良好的交互性&#xff0c;精巧的图表设计&#xff0c;得到了众多开发者的认可。而 Python 是一门富有表…

Spring @Configuration – RabbitMQ连接

我一直在转换必须使用Spring Configuration机制配置到RabbitMQ的连接的应用程序-最初&#xff0c;我使用xml bean定义文件来描述配置。 这是我的原始配置&#xff1a; <beans ...;><context:property-placeholder/><rabbit:connection-factory id"rabbit…

大叔手记(12):我的一次面试经历(谈大叔如何应对面试官)

本文目的 写本文的目的&#xff0c;大叔不是为了装逼&#xff08;虽然说话的口气有时候也确实有点装逼&#xff0c;性格导致的&#xff0c;咳。。。我得改&#xff09;&#xff0c;其实大叔在公司也只是小罗罗&#xff0c;本文的目的主要是为了向大家展示如何通过各种软技能应对…

欧拉回路判断规则

无向图&#xff1a;因为欧拉路径中&#xff0c;除了起点与终点以外&#xff0c;任意点的“进”“出”次数相等&#xff0c;所以除了两个点为奇点&#xff08;度数为奇数的点&#xff09;&#xff08;终点和起点&#xff09;以外&#xff0c;其它点的度数均为偶数。 如果是欧拉回…

使用Apache Camel 2.14的轻松REST端点

Apache Camel 最近发布了一个新版本 &#xff0c; 其中一些新功能由我的同事Claus Ibsen博客发布 。 您确实应该检查他的博客条目并深入研究更多细节&#xff0c;但是我希望尝试的功能之一是新的REST DSL 。 那么&#xff0c;这是什么新的DSL&#xff1f; 实际上&#xff0c;…

认识Mahout下的云计算机器学习

认识Mahout下的云计算机器学习 Apache Mahout 是 ApacheSoftware Foundation (ASF) 旗下的一个开源项目&#xff0c;提供一些可扩展的机器学习领域经典算法的实现&#xff0c;旨在帮助开发人员更加方便快捷地创建智能应用程序&#xff0c;并且&#xff0c;在 Mahout 的最近版本…

xshell常用的命令

Xshell查看所有的进程&#xff1a;ps -ef|grep tomcat查询该目录下所有的项目&#xff1a;lsXshell查看所有的zookeeper进程&#xff1a;ps -ef|grep zoo 进入到bin目录下 然后启动&#xff1a;./zkServer.sh startchmod命令大全及其解释 https://jingyan.baidu.com/article/5d…

NetBeans 8.0的五个新性能提示

NetBeans 8.0引入了几个新的Java提示 。 尽管有许多与Java Persistence API相关的新提示&#xff0c;但我还是关注Performance类别中的五个新提示。 NetBeans 8.0引入的五个新的“性能提示”是&#xff1a; 已装箱价值的装箱 冗余String.toString&#xff08;&#xff09; …

centos找不到IFCONFIG命令

# ifconfig  提示命令不存在  使用 # /sbin/ifconfig 即可  原因&#xff1a; 系统默认的环境变量设置不对  在 普通用户 和root用户下分别执行echo $PATH&#xff0c;PATH里少了四个地址&#xff1a;/sbin:/usr/sbin:/usr/local/sbin:/usr/kerberos/sbin  而&#x…

机智云小程序启蒙:WebSocket网页控制

机智云小程序启蒙&#xff1a;WebSocket网页控制 机智云Web版的JS远程控制设备&#xff0c;是调用了机智云开放的Open API和WebSocket API来实现的。这个是设计小程序最好的基础&#xff0c;也可以使无安卓设备的用户用网页远程控制设备。 其中&#xff0c;Open API用到的接口…

js 数据类型判断

判断type类型 isString (o) { //是否字符串return Object.prototype.toString.call(o).slice(8, -1) String }isNumber (o) { //是否数字return Object.prototype.toString.call(o).slice(8, -1) Number }isBoolean (o) { //是否booleanreturn Object.prototype.toString.cal…

Maven排除所有传递依赖项

“ 传递依赖项是Maven 2.0中的新功能。 这样一来&#xff0c;您就可以避免发现和指定自己的依赖项所需的库&#xff0c;并自动将它们包括在内。” 我遇到了一个问题&#xff0c;其中一些依赖项在运行时可用&#xff0c;但在公共关系存储库中不可用。 例如&#xff0c;Hibernate…

Web service 超过了最大请求长度错误解决

Web service 超过了最大请求长度错误解决 System.Web.Services.Protocols.SoapException: 运行配置文件中指定的扩展时出现异常。 ---> System.Web.HttpException: 超过了最大请求长度。 在 System.Web.HttpRequest.GetEntireRawContent() 在 System.Web.HttpRequest.ge…