一下文章引自网络快照
http://203.208.37.132/search?q=cache:65WdqffxH-UJ:konshi.blogspot.com/2009/12/android-20.html+ContactsContract&cd=16&hl=zh-CN&ct=clnk&gl=cn&inlang=zh-CN&client=aff-avalanche&st_usg=ALhdy2-Kg5_1uawrMLIyiSfUHm1PLeA1GQ
如果使用了
import android.provider.Contacts;
import android.provider.Contacts.People;
就要特別注意一下,
因為在android 2.0 SDK當中不建議使用,
請改用
import android.provider.ContactsContract;
import android.provider.ContactsContract.PhoneLookup;
要取得聯絡人的姓名sample code如下:
final Cursor people = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
while(people.moveToNext())
{
int nameFieldColumnIndex = people.getColumnIndex(PhoneLookup.DISPLAY_NAME);
String contact = people.getString(nameFieldColumnIndex);
}
people.close();
奇怪的事,如果要取得聯絡人的電話
如果用
int nameFieldColumnIndex = people.getColumnIndex(PhoneLookup.NUMBER);
String phone = people.getString(nameFieldColumnIndex);
nameFieldColumnIndex return回來的值總是 ─1,
上網google了一下,找到瞭解法,
1. 首先找到目標聯絡人的 _ID,例如要找第一個聯絡人的_ID
Cursor target = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI,null, null, null, null);
target.moveToFirst();
String contactId = cursor.getString(target.getColumnIndex(ContactsContract.Contacts._ID));
2. 接著透過_ID,來找電話號碼,電話號碼可能不只有一個,所以先判斷有無電話號碼
String IsPhone = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER));
3. 如果有電話,接著再去query電話號碼
if( (Integer.parseInt(IsPhone) > 0) )
{
Cursor phoneNumber = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null,ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = "+ contactId,null, null);
while (phones.moveToNext())
{
String strPhoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
}
}
** 如果要查詢e-mail,程式如下
Cursor emails = getContentResolver().query(ContactsContract.CommonDataKinds.Email.CONTENT_URI,null,ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = " + contactId,null, null);
while (emails.moveToNext())
{
String emailAddress = emails.getString(emails.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA));
}
另外
Cursor cursor = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI,null, null, null, null);
while (cursor.moveToNext())
{
String contactId = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));
String hasPhone = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER));
if (Boolean.parseBoolean(hasPhone))
{
Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null,ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = "+ contactId,null, null);
while (phones.moveToNext())
{
String phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
}
phones.close();
}
Cursor emails = getContentResolver().query(ContactsContract.CommonDataKinds.Email.CONTENT_URI,null,ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = " + contactId,null, null);
while (emails.moveToNext())
{
String emailAddress = emails.getString(emails.getColumnIndex(ContactsContract.CommonDataKinds.CommonDataColumns.DATA));
}
emails.close();
}
cursor.close();
分享到:
相关推荐
在Android 2.0之前,开发人员通常会使用`Contacts`和`People`类来获取联系人数据。但在2.0之后,这些类已被弃用,取而代之的是`ContactsContract`,这是一个更强大且灵活的接口,可以处理更复杂的联系人数据结构。 ...
2. **联系人管理增强**:新增加的联系人管理功能允许用户轻松地将社交网络的好友信息整合到本地联系人中,使联系人的管理变得更加直观。 3. **浏览器升级**:内置浏览器得到了重大更新,包括支持多个标签页浏览、...
在Android SDK 2.0及更高版本中,访问和获取联系人信息的API发生了变化,以提供更安全和高效的数据访问方式。在旧版本中,我们通常会使用`android.provider.Contacts`和`android.provider.Contacts.People`类来获取...
Android系统提供了一些基本应用程序,如拨打电话、收发短信、联系人、桌面等。 ArcGIS Runtime for Android是ArcGIS Runtime SDKs的一个成员,它为Android平台提供GIS功能,允许开发者在Android应用程序中集成强大...
本节我们将深入探讨“Android联系人4--联系人查询”,主要关注2.0及以后版本的查询模式,同时也会提及其中存在的效率问题。 在Android 2.0及以上版本,Android引入了Content Provider的概念,它是Android应用之间...
Android 6.0以后引入了运行时权限,开发者需要在运行时动态请求权限,如访问联系人、读写存储等。微博应用可能需要这些权限来实现社交功能。 8. 广播接收器: 利用BroadcastReceiver,微博客户端可以监听系统事件...
它提供了拨打电话、收发短信、联系人、桌面等基础应用,支持开发者利用Android应用程序框架的API开发出丰富多彩的应用软件。 ### ArcGIS Runtime for Android简介 ArcGIS Runtime是Esri公司提供的一个软件开发工具...
例如,获取联系人的电话号码: ```java String contactId = cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID)); Cursor phones = cr.query( ContactsContract.CommonDataKinds.Phone.CONTENT_URI...
"简单的SQLite查询"这部分内容会介绍如何创建数据库表,插入、更新和删除数据,以及执行基本的查询操作,如SELECT语句,来获取并显示通讯录中的联系人信息。 在项目的文件列表中,我们看到以下几个关键文件: 1. `...
12. **权限管理**:Android 6.0及以上版本引入了运行时权限管理,应用需要在运行时请求用户的权限,如读写存储、访问联系人等。 13. **测试与调试**:项目中可能包含单元测试、集成测试和UI测试,使用JUnit、...
如果需要,处理iOS的隐私权限提示,如访问联系人、麦克风和摄像头等。 3. **功能实现**: - **基本聊天**:创建聊天会话,发送文本、图片、语音、文件等多种类型的消息。 - **音视频通话**:集成融云的RTC服务,...
【Android简易通讯录源码】是一个面向初学者和开发者的学习资源,它提供了实现基础通讯录功能的完整代码,包括添加联系人、删除联系人、编辑联系人信息以及搜索和查看联系人等操作。同时,该源码还包含了修改联系人...
首先,从Android手机中读取联系人数据需要用到`ContactsContract`类,它是Android提供的用于访问设备上联系人数据的ContentProvider。开发者可以通过ContentResolver查询`ContactsContract.Contacts`、`...
- **联系人选择对话框**:提供了统一的联系人选择器,便于应用集成。 总之,“android-15 platforms”是Android开发中不可或缺的一部分,它让开发者能够针对冰淇淋三明治版本的Android设备创建和优化应用程序。通过...
Google定义了一批intents(如:打电话啊,联系人清单上选择一个联系人,打开浏览器,电池更换的时候提供提示,等等。但是任何程序可以自由定义额外的intents和content-providers。我们可以很容易的联想到独立开发的...
在现代移动应用中,获取和管理用户权限至关重要,例如访问联系人、位置信息、相机、存储等。这些权限的获取不仅需要遵循各个操作系统的规定,还需要以用户友好的方式呈现。HTML5提供了部分原生接口来处理这些权限...
1. **联系人管理**:应用程序需要能够读取、显示、编辑和管理手机中的联系人数据。这涉及到Android的Contacts Provider API,通过ContentResolver和Uri来操作联系人。 2. **联系人同步**:为了保持通讯录的实时性,...
2. 邮件服务API:与邮件服务器进行通信,获取和发送邮件,管理联系人和日程等。 3. 账户设置:保存用户账户信息,如用户名、密码、SMTP服务器地址、IMAP服务器地址等。 4. 同步机制:定期或按需同步新邮件,保持本地...