`
wang_peng1
  • 浏览: 3904942 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

android 2.0读取联系人

阅读更多

一下文章引自网络快照

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();

 

分享到:
评论

相关推荐

    Android2.0 中读取联系人——ContactsContract

    android的SDK做了调整,相应的读取联系人资料有了变化。 这里提供的是如何在2.0包括2.1中读取联系人资料的代码

    Android+SDK+2.0中获取联系人信息.docx

    还是不错的 可以运行感兴趣的可以下载看看

    Android UI组件实例集合

    Google定义了一批intents(如:打电话啊,联系人清单上选择一个联系人,打开浏览器,电池更换的时候提供提示,等等。但是任何程序可以自由定义额外的intents和content-providers。我们可以很容易的联想到独立开发的...

    精通ANDROID 3(中文版)1/2

    第1章 Android计算平台简介  1.1 面向新PC的全新平台  1.2 Android的历史  1.3 Dalvik VM剖析  1.4 理解Android软件栈  1.5 使用Android SDK开发最终用户应用程序  1.5.1 Android模拟器  1.5.2 ...

    精通Android 3 (中文版)2/2

    第1章 Android计算平台简介  1.1 面向新PC的全新平台  1.2 Android的历史  1.3 Dalvik VM剖析  1.4 理解Android软件栈  1.5 使用Android SDK开发最终用户应用程序  1.5.1 Android模拟器  1.5.2 ...

    Android开发资料合集-World版!

    9.58、2.0以上版本查询联系人详细信息 282 9.59、2.0以上版本添加联系人 285 9.60、拨打电话 287 9.61、发送SMS、MMS 287 9.62、监听电话被呼叫状态 288 9.63、监听要拨打的电话(可以后台进行修改号码) 290 9.64、...

    Android 开发技巧

    9.58、2.0以上版本查询联系人详细信息 282 9.59、2.0以上版本添加联系人 285 9.60、拨打电话 287 9.61、发送SMS、MMS 287 9.62、监听电话被呼叫状态 288 9.63、监听要拨打的电话(可以后台进行修改号码) 290 9.64、...

    Apowersoft Phone Manager Pro手机助手2.0中文注册版.rar

    在手机和电脑之间传输数据,备份手机上的短信联系人电话号码及通话记录等,备份手机中保存的相片及视频。转换手机铃声,安装最新的应用到你的手机,管理手机中的文件,备份数据到电脑或者将数据恢复到手机。连接方式...

    Lostify:Android应用程序,用于使用离线消息获取电话信息(联系人,位置和锁定)

    想要获得联系人的电话以进行重要通话吗? 解决方案1:只需将一条带有联系人姓名的短信发送到您的手机,您就会以短信的形式返回电话号码。 问题2:您的手机丢失了确切的位置? 解决方案2:Lostify会立即向您发送...

    Android--Event-Triggered-Skype-Caller:使用 iBeacons 和 NFC 的事件触发 Skype 呼叫者

    Skype 联系人可以与 NFC 标签或 iBeacon 配对。 每个联系人都可以关联一个在靠近其触发设备时要触发的操作:每次视频通话、通话、聊天和提示用户。 检测到设备后,应用程序将执行相关操作。 ##Requirements 这旨在...

    卓大师刷机专家 v2.7.0

    卓大师刷机专家 v2.7.0 版本:2.7.0 软件语言:中文 软件类别:刷机工具 软件大小:2.84 MB 适用固件:2.0及更高固件 ...卓大师刷机专家支持50多款手机,内置ROM市场,支持应用、短信、联系人备份,获取root权限功能。

    Embarcadero.Delphi.10.2.2.v25.0.29039.2004.Lite.v14.3完整版

    3、原版依赖 300多兆的 .NET Framework 3.5 sp1,我把它依赖的文件提取出来整合到安装程序中了,所以还是与以往 lite 一样,仅依赖 .NET Framework 2.0。 4、原版 Bds.exe 和 LicenseManager.exe 会访问网络,为避免...

    JAVA上百实例源码以及开源项目

     数字证书:从文件中读取数字证书,生成文件输入流,输入文件为c:/mycert.cer,获取一个处理X.509证书的证书工厂…… Java+ajax写的登录实例 1个目标文件 内容索引:Java源码,初学实例,ajax,登录  一个Java+ajax写...

    JAVA上百实例源码以及开源项目源代码

     数字证书:从文件中读取数字证书,生成文件输入流,输入文件为c:/mycert.cer,获取一个处理X.509证书的证书工厂…… Java+ajax写的登录实例 1个目标文件 内容索引:Java源码,初学实例,ajax,登录  一个Java+ajax写...

    《程序员》杂志2012年第1期.pdf (免费积分下载)

    正如Robert Scoble在近两年前Siri被Apple收购时撰文所指出的,Siri代表了继1990年代“通过域名找页面”、2000年代“通过页面交互聚人”之后的第三代互联网交互模式:“消除网页,将API与人直接联系在一起”。...

    java开源包1

    缓存读取自redis的slave节点,写入到redis的master节点。 Java对象的SQL接口 JoSQL JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java...

    java开源包11

    缓存读取自redis的slave节点,写入到redis的master节点。 Java对象的SQL接口 JoSQL JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java...

    java开源包2

    缓存读取自redis的slave节点,写入到redis的master节点。 Java对象的SQL接口 JoSQL JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java...

Global site tag (gtag.js) - Google Analytics