- 浏览: 6352274 次
- 性别:
- 来自: 一片神奇的土地
文章分类
- 全部博客 (745)
- JQuery (25)
- JS (33)
- 数据库 (59)
- Java基础 (56)
- JSON (8)
- XML (8)
- ireport (7)
- 设计模式 (10)
- 心情 (14)
- freemarker (1)
- 问题 (15)
- powerdesigner (2)
- CSS (15)
- DWR (4)
- tomcat (16)
- Hibernate (12)
- Oracle (7)
- Struts (7)
- Spring (34)
- JSP (23)
- 需学习 (64)
- 工具类库 (63)
- Maven (14)
- 笔试题 (34)
- 源码学习 (31)
- 多线程 (39)
- Android (32)
- 缓存 (20)
- SpringMVC (14)
- jQueryEasyUi (12)
- webservice-RPC (13)
- ant (1)
- ASP.NET (10)
- 正则表达式 (3)
- Linux (15)
- JBoss (1)
- EJB (3)
- UML (2)
- JMS (3)
- Flex (8)
- JSTL (2)
- 批处理 (5)
- JVM (16)
- 【工具】 (16)
- 数据结构 (29)
- HTTP/TCP/Socket (18)
- 微信 (1)
- tomcat源码学习 (15)
- Python (30)
- 主机 (2)
- 设计与架构 (19)
- thrift-RPC (2)
- nginx (6)
- 微信小程序 (0)
- 分布式+集群 (12)
- IO (1)
- 消息队列 (4)
- 存储过程 (8)
- redis (9)
- zookeeper (5)
- 海量数据 (5)
最新评论
-
360pluse:
技术更新,战术升级!Python爬虫案例实战从零开始一站通网盘 ...
Python爬虫实战:Scrapy豆瓣电影爬取 -
18335864773:
推荐用 pageoffice 组件生成 word 文件。
JAVA生成WORD工具类 -
jjhe369:
LISTD_ONE 写道起始地址为163.135.0.1 结束 ...
IP地址与CIDR -
baojunhu99:
private final int POOL_SIZE = 5 ...
使用CompletionService获取多线程返回值 -
LovingBaby:
胡说,javascript 运行时是单线程的,event lo ...
Ajax请求是否可以实现同步
一、
从Android 2.0 SDK开始有关联系人provider的类变成了ContactsContract,虽然老的android.provider.Contacts能用,但是在SDK中标记为为deprecated将被放弃不推荐的方法,而从Android 2.0及API Level为5开始新增了android.provider.ContactsContract来代替原来的方法。
ContactsContract的子类ContactsContract.Contacts是一张表,代表了所有联系人的统计信息。比如联系人ID(—ID),查询键(LOOKUP_KEY),联系人的姓名(DISPLAY_NAME_PRIMARY),头像的id(PHOTO_ID)以及群组的id等等。
我们可以通过以下的方法取得所有联系人的表的Cursor对象:
1)ContentResolver contentResolver=getContentResolver();//获取 ContentResolver对象查询在ContentProvider里定义的共享对象;
2)Cursor cursor=contentResolver.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
//根据URI对象ContactsContract.Contacts.CONTENT_URI查询所有联系人;
从Cursor对象里我们关键是要取得联系人的_id。通过它,再通过ContactsContract.CommonDataKinds的各个子类查询该_id联系人的电话(ContactsContract.CommonDataKinds.Phone),email(ContactsContract.CommonDataKinds.Email)等等。
以取得该联系人所有电话为例:
1)int idFieldIndex=cursor.getColumnIndex(ContactsContract.Contacts._ID);
int id=cursor.getInt(idFieldIndex);//根据列名取得该联系人的id;
2)Cursor phonecursor=contentResolver.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID+"=?", new String[]{Integer.toString(id)}, null);
//再类ContactsContract.CommonDataKinds.Phone中根据查询相应id联系人的所有电话;
类似地可以ContactsContract.CommonDataKinds的不同的子类查询不同的内容。android文档告诉我们推荐使用ContactsContract.Contacts.LOOKUP_KEY代替ContactsContract.Contacts._ID。
最后,由于读取联系人比较的占用资源,为了提高用户的体验度。考虑将读取的过程放在线程里完成,推荐使用AsyncTask类。
二、
在2.1中,display_name 在contact表中,而data表中包含很多contact的数据,比如电话,姓名,email等 ,如果要查询一个联系人的姓名和电话,网上大多数的做法是:
先查contact表,得到姓名,再根据has_phone_number是否是1决定data表中有无电话记录。这样是要查发2个uri,得到两个cursor在分别去除需要的内容。
其实可以直接发一个uri就查处姓名和号码,代码:
Cursor c=getContentResolver().query(ContactsContract.Data.CONTENT_URI, null, "mimetype='vnd.android.cursor.item/phone_v2'", null, null);
这个uri对象data,他会去查view_data这个试图,试图定义就是data,raw_contacts,mimetypes,group等一系列表的联合查询,而上面这个uri发出去会得到很多字段,当条件为mimetype=vnd.android.cursor.item/phone_v2则查的是此人电话所对应的那条记录,其中也会得到姓名,
注意:
姓名是根据display_name 取得
电话是根据data1取得
Example1:
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Uri contactsUri=ContactsContract.Contacts.CONTENT_URI; String[] proj1=new String[]{ContactsContract.Contacts.DISPLAY_NAME, ContactsContract.Contacts.HAS_PHONE_NUMBER, ContactsContract.Contacts.LOOKUP_KEY}; Cursor curContacts=getContentResolver().query(contactsUri,proj1, null, null, null); ArrayList<String> contactsList=new ArrayList<String>(); String allPhoneNo=""; if(curContacts.getCount()>0){ while(curContacts.moveToNext()){ // get all the phone numbers if exist if(curContacts.getInt(1)>0){ allPhoneNo=getAllPhoneNumbers(curContacts.getString(2)); } contactsList.add(curContacts.getString(0)+" , "+allPhoneNo); allPhoneNo=""; } } // binding the data to ListView setListAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, contactsList)); ListView lv=getListView(); lv.setTextFilterEnabled(true); } /** * Get all the phone numbers of a specific contact person */ public String getAllPhoneNumbers(String lookUp_Key){ String allPhoneNo=""; // Phone info are stored in the ContactsContract.Data table Uri phoneUri=ContactsContract.CommonDataKinds.Phone.CONTENT_URI; String[] proj2={ContactsContract.CommonDataKinds.Phone.NUMBER}; // using lookUp key to search the phone numbers String selection=ContactsContract.Data.LOOKUP_KEY+"=?"; Cursor cur=getContentResolver().query(phoneUri,proj2,selection, new String[]{lookUp_Key}, null); while(cur.moveToNext()){ allPhoneNo+=cur.getString(0)+" "; } return allPhoneNo; }
来源:http://www.cnblogs.com/ruiyi1987/archive/2011/06/20/2084925.html
Example2:
private List<HashMap<String, String>> fillMaps() { List<HashMap<String, String>> items = new ArrayList<HashMap<String, String>>(); Cursor cur = null; try { // Query using ContentResolver.query or Activity.managedQuery cur = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null); if (cur.moveToFirst()) { int idColumn = cur.getColumnIndex(ContactsContract.Contacts._ID); int displayNameColumn = cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME); // Iterate all users do { String phoneNumber = ""; String contactId = cur.getString(idColumn); String displayName = cur.getString(displayNameColumn); // Get number of user's phoneNumbers int numberCount = cur.getInt(cur.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER)); if (numberCount > 0) { Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = " + contactId /* * + " and " + ContactsContract.CommonDataKinds * .Phone.TYPE + "=" + ContactsContract.CommonDataKinds * .Phone.TYPE_MOBILE */, null, null); if (phones.moveToFirst()) { int numberColumn = phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER); do { phoneNumber += phones.getString(numberColumn) + ","; } while (phones.moveToNext()); } } // Add values to items HashMap<String, String> i = new HashMap<String, String>(); i.put("name", displayName); i.put("key", phoneNumber); items.add(i); } while (cur.moveToNext()); } else { HashMap<String, String> i = new HashMap<String, String>(); i.put("name", "Your Phone"); i.put("key", "Have No Contacts."); items.add(i); } } finally { if (cur != null) cur.close(); } return items; }
来源:http://www.apkbus.com/android-14565-1-1.html
评论
[list] [0000000000000000000000000000000000000000000000000000000000000000000000000000] [/list]
发表评论
-
选择照片和拍照
2018-06-13 15:31 1669Android拍照或从本地选择图片上传 Android ... -
PullToRefresh的简单使用
2018-05-31 16:06 1300Android下拉刷新控件--PullToRefresh的简 ... -
fragment内嵌fragment之间传值+切换fragment
2018-05-30 11:59 13458跳转: 从一个Fragment跳转到另一个Fragmen ... -
控件使用问题
2018-05-22 09:59 1552TextView最大长度限制,超出部分省略号显示 xml ... -
ViewPager+RadioGroup+TabLayout
2018-05-22 09:38 1124ViewPager: ViewPager 详解(五)-- ... -
网络请求工具类HttpUtils
2018-05-19 21:07 2426代码如下: import android.app.Acti ... -
android排版布局学习
2018-05-18 16:24 3890Android开发学习之路--UI之基本布局 andro ... -
[工具]-Android切图
2018-05-18 14:21 1523切图小科普!聊聊原生APP切图那些事儿 安卓APP设计规 ... -
【Android基础问题】
2018-05-18 13:49 7411、appcompat_v7: appcompat_v7 ... -
WebView使用
2018-05-17 17:42 1200Android:最全面的 Webvie ... -
《第一行代码》服务+AsyncTask+定时任务
2018-04-23 09:45 179014、服务 服务(Service)是 Androi ... -
《第一行代码》通知+接收拦截发送短信
2018-04-23 09:44 170613、通知 在活动里 ... -
《第一行代码》内容提供器
2018-04-20 16:08 129112、内容提供器 内容提供器(Content Pro ... -
《第一行代码》数据存储
2018-04-20 16:07 69211、数据存储 将数据存储到文件中 ope ... -
《第一行代码》广播
2018-04-20 15:34 100010、广播接收器(Broadcast Receive ... -
《第一行代码》控件、布局、碎片
2018-04-20 14:40 9208、控件 TextView: a ... -
【Android studio配置和错误】
2018-04-20 14:21 4053Gradle是一个基于Apache Ant和Apache ... -
《第一行代码》基础总结
2016-07-12 22:07 1918activity的生命周期—— ... -
《第一行代码》扩展总结
2016-06-29 15:28 1342Android更新UI的两种方法——handler与run ... -
Android快速开发工具类
2016-01-21 14:56 1999来源:http://blog.csdn.net/lmj62 ...
相关推荐
它是一个内容提供者(Content Provider),允许应用通过标准的 Uri(统一资源标识符) 查询、插入、更新或删除联系人信息。这篇博客文章《android中ContactsContract获取联系人的方法》深入探讨了如何使用这个API来...
这篇博客“ContactsContract读取联系人的异步方法”深入探讨了如何利用这个API以非阻塞的方式获取用户联系人信息,这对于提高应用程序性能和用户体验至关重要。下面我们将详细讲解ContactsContract API以及如何实现...
在Android 2.0及更高版本中,由于SDK对联系人数据的访问方式进行了更新,开发者需要使用新的API来读取和操作联系人信息。本文将详细介绍如何使用`ContactsContract`类来实现这一功能。 在Android 2.0之前,开发人员...
例如,`ContactsContract.Contacts` 表示联系人信息,`ContactsContract.CommonDataKinds.Phone` 表示联系人的电话号码,`ContactsContract.CommonDataKinds.Email` 表示联系人的电子邮件地址等。 ### 增加联系人 ...
要根据电话号码获取联系人信息,首先需要查询`ContactsContract.Data`表,因为该表包含了联系人的具体字段,如电话号码、姓名等。以下是一个基本的查询示例: ```java Uri contactUri = Uri.withAppendedPath...
3. 使用ContentResolver查询ContactsContract来获取联系人信息。 4. 从Cursor中提取所需字段,如姓名和电话号码。 通过以上步骤,我们就能实现“Android简单的获取联系人的信息”这一功能。在实际开发中,还需要...
在IT行业中,尤其是在移动应用开发领域,获取设备上的联系人信息是一项常见的功能需求。这个"火山一键获取所有联系人信息类.rar"文件很可能是提供了一个Java或Kotlin类,用于在Android系统上方便快捷地获取用户手机...
在Android软件开发中,获取...总之,Android软件开发中获取通讯录联系人信息的过程涉及权限管理、ContentResolver和ContactsContract类的使用。通过合理的代码设计和权限控制,开发者可以安全、高效地实现这一功能。
在Android开发中,获取联系人、SIM卡信息以及最近联系人列表是常见的需求。下面将详细解释这些概念和实现方式。 一、Android联系人管理 Android系统提供了ContentProvider接口来访问和操作联系人数据。主要涉及到...
在Android和iOS等移动操作系统中,查看和获取联系人电话是一项常见的功能,广泛应用于社交应用、通讯工具和其他需要用户授权访问联系人信息的软件中。本文将深入探讨如何在这些平台上实现这一功能。 首先,我们从...
接下来,你可以通过Content Resolver查询Contacts Contract库中的数据,Contacts Contract是Android提供的API,用于访问和管理联系人信息。 描述中提到的"安卓获取手机联系人demo"是一个具体的实例,可能包含一个...
首先,要获取手机通讯录的联系人信息,我们需要访问Android的Content Provider,这是一个用于在应用程序之间共享数据的接口。在Android中,`ContactsContract`类提供了对系统通讯录的访问。以下是如何获取手机通讯录...
在Android系统中,获取联系人信息是常见的功能之一,它涉及到Android系统的Content Provider机制,用于在应用程序之间共享数据。在本教程中,我们将深入探讨如何按照字母顺序获取手机中的联系人信息,就像手机通讯录...
本教程将详细讲解如何在Android应用中获取联系人信息以及如何添加新的联系人。 一、获取联系人信息 在Android中,有两种主要的方式来获取设备上的联系人信息: 1. 使用ContentResolver和ContactsContract类: ...
本文将深入探讨如何实现这一功能,包括获取手机联系人信息以及如何将这些信息整合到自定义的特别关心或常用联系人列表。 首先,我们需要获取手机中的联系人数据。Android提供了ContentResolver和ContactsContract类...
综上所述,获取手机联系人信息包括头像和手机号码涉及的主要步骤是:获取读取联系人的权限,使用ContentResolver和ContactsContract查询联系人信息,通过ContentResolver获取联系人头像,最后使用RecyclerView和...
在获取联系人信息之前,你需要获取到ContentResolver实例,它是与ContentProvider进行交互的接口。通常在Activity或Fragment中,你可以通过调用`getContentResolver()`方法获得。 ```java ContentResolver ...
这篇教程将深入探讨如何在Android应用中获取联系人信息、通话记录以及短信消息。首先,我们来了解一下基本概念。 1. **获取联系人信息**: Android提供了一套完整的API来访问和操作联系人数据。主要涉及`...
在Android平台上,获取通讯录联系人信息是常见的需求,尤其对于开发涉及社交功能的应用来说更是必不可少。本示例源码提供了实现这一功能的方法,帮助开发者深入理解如何在Android应用中读取并操作用户通讯录数据。 ...