iOS读取通讯录获取好友通讯录信息[名字(姓+名字),手机号码(多个号码)等]

一、创建通讯录对象

self.addressBook=ABAddressBookCreateWithOptions(NULL, NULL);

//请求访问用户通讯录,注意无论成功与否block都会调用

ABAddressBookRequestAccessWithCompletion(self.addressBook, ^(bool granted, CFErrorRef error) {

if (!granted) {

NSLog(@"未获得通讯录访问权限!");

}

});

ABPeoplePickerNavigationController *peoplePicker = [[ABPeoplePickerNavigationController alloc] init];

peoplePicker.peoplePickerDelegate = self;

[self presentViewController:peoplePicker animated:YES completion:nil];

二、实现代理协议

ABPeoplePickerNavigationControllerDelegate

三、实现代理方法

#pragma mark -- ABPeoplePickerNavigationControllerDelegate

- (void)peoplePickerNavigationController:(ABPeoplePickerNavigationController*)peoplePicker didSelectPerson:(ABRecordRef)person property:(ABPropertyID)property identifier:(ABMultiValueIdentifier)identifier {

//取得记录中得信息

ABMultiValueRef valuesRef = ABRecordCopyValue(person, kABPersonPhoneProperty);

  //lastName为姓,firstName为名,将两个字符串连接起来为wholeName全名

NSString *firstName=(__bridge NSString *) ABRecordCopyValue(person, kABPersonFirstNameProperty);//注意这里进行了强转,不用自己释放资源

NSString *lastName=(__bridge NSString *)ABRecordCopyValue(person, kABPersonLastNameProperty);

NSString *[email protected]"";

if (firstName.length>0) {

if (lastName.length>0) {

wholeName=[lastName stringByAppendingString:firstName];

}

else{

wholeName=firstName;

}

}

else {

if (lastName.length>0)

{

wholeName=[wholeName stringByAppendingString:lastName];

}

else{

[email protected]"未知联系人";

}

}

CFIndex index = ABMultiValueGetIndexForIdentifier(valuesRef,identifier);

NSString *value = (__bridge NSString *)ABMultiValueCopyValueAtIndex(valuesRef,index);

[self dismissViewControllerAnimated:YES completion:^{

if(value.length!=0||wholeName.length!=0)

{

//一般读取过来的号码会是短线连接格式,下面方法可以去掉号码横杠

NSArray *NBArr=[value componentsSeparatedByString:@"-"];

NSString *[email protected]"";

for (int i=0; i<NBArr.count; i++) {

finalyNB=[finalyNB stringByAppendingString:[NBArr objectAtIndex:i]];

}

    NSLog(@"%@,%@",wholeName,finalyNB);

}

}];

}

时间: 11-30

iOS读取通讯录获取好友通讯录信息[名字(姓+名字),手机号码(多个号码)等]的相关文章

XMPP系列(三)---获取好友列表、添加好友

1.心跳检测.掉线重连功能 客户端和服务器端都可以设置多久发送一次心跳包,如果对方没有返回正确的pong信息,则会断开连接,而添加掉线重连功能,则会自动进行连接. 如果自己写聊天功能还得自己做心跳检测和掉线重连,比较麻烦.好在XMPP中已经做了心跳检测和掉线重连的模块,只需要几行代码加进去就能实现掉线重连,非常方便. XMPP中Extensions文件下都是可以自己添加的Module,它们都继承自XMPPModule,而添加的方法也非常的简单: <span style="font-size

Web 在线文件管理器学习笔记与总结(11)获取文件夹信息 (12)返回上一级操作

(11)获取文件夹信息 文件夹没有修改操作. index.php: <?php require 'dir.func.php'; require 'file.func.php'; require 'common.func.php'; $path = 'file'; $path = @$_REQUEST['path'][email protected]$_REQUEST['path']:$path; $info = readDirectory($path); if($info == NULL){ e

一步一步来做WebQQ机器人-(四)(获取好友列表和群列表)

× 本篇主要是: 获取好友列表,群列表 我会尽量详细一点,尽我所知的分享一些可能大家已经掌握的或者还不清楚的经验 利于大家阅读,文章样式不再复杂化,根据内容取固定色 目前总进度大概65% 全系列预计会有这些步骤,当然某些步骤可能会合并: 验证码 第一次登陆 第二次登陆 保持在线和接收消息 获取好友和群列表 发送消息 变成智能的(*?∀?*) 获取好友 1-获取QQ好友的hash算法 P = function (b, j) { for (var a = j + "password error&qu

C# 实现访问FTP服务器下载文件,获取文件夹信息小记

最近因为要开发广告制作工具,自动生成广告流,需要获取第三方服务器上的文件资源,经过摸索,从这次经历中记录下. FtpWebRequest reqFtp; WebResponse response = null; //获取文件夹信息 reqFtp = (FtpWebRequest)WebRequest.Create(this.ftp);//ftp://IP:port/文件夹名1/文件夹名2/.../文件夹名 reqFtp.UseBinary = true; reqFtp.KeepAlive = f

android:如何从照片中获取拍摄地址信息

在开发中遇到一个需求,需要解析拿到照片拍摄时的地址信息,在网上有很多网站提供照片上传后解析出照片的具体信息,很详细.android也很给力,提供ExifInterface ,可以获取到拍摄照片时的很多信息. TAG_DATETIME 时间日期 TAG_FLASH 闪光灯 TAG_GPS_LATITUDE 纬度 TAG_GPS_LATITUDE_REF 纬度参考 TAG_GPS_LONGITUDE 经度 TAG_GPS_LONGITUDE_REF 经度参考 TAG_IMAGE_LENGTH 图片长

android 安卓APP获取手机设备信息和手机号码的代码示例

下面我从安卓开发的角度,简单写一下如何获取手机设备信息和手机号码 准备条件:一部安卓手机.手机SIM卡确保插入手机里.eclipse ADT和android-sdk开发环境 第一步:新建一个android工程(JinshanTest), 并需要在工程的AndroidManifest.xml文件中,添加权限 <uses-permission android:name="android.permission.READ_PHONE_STATE"/> 图例: 第二步:新建一个工具类

xmpp开发教程(四)-获取好友列表

这章节主要是介绍如何获取好友列表,在这里主要是做功能部分,后续更新的时候就将界面也做上去 首先提供下核心代码 1 xmppRosterStorage = [[XMPPRosterCoreDataStorage alloc] init]; 2 // xmppRosterStorage = [[XMPPRosterCoreDataStorage alloc] initWithInMemoryStore]; 3 4 xmppRoster = [[XMPPRoster alloc] initWithRo

【Android Developers Training】 99. 获取联系人详细信息

注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer.android.com/training/contacts-provider/retrieve-details.html 这节课将会展示如何获取一个联系人的详细数据,比如电子邮件地址,电话号码,等等.当用户获得一个联系人后,他会想要查看他的详细信息.你可以展示给他们所有的信息,或者只展示某一特定类

Atitit.获取主板与bios序列号获取硬件设备信息&#160;&#160;Wmi&#160;wmic&#160;的作用

Atitit.获取主板与bios序列号获取硬件设备信息  Wmi wmic 的作用 1 获取硬件核心基础核心基础Wmi1 2 其他资料2 3 Wmic WMI 命令行接口2 4 Atitit.获取主板与bios序列号2 5 参考3 1 获取硬件核心基础核心基础Wmi WMI,是Windows 2K/XP管理系统的核心:对于其他的Win32操作系统,WMI是一个有用的插件.WMI以CIMOM为基础,CIMOM即公共信息模型对象管理器(Common Information Model Object 

Android如何获取SIM卡信息

android 获取sim卡运营商信息 TelephonyManager tm = (TelephonyManager)Context.getSystemService(Context.TELEPHONY_SERVICE); TelephonyManager 的使用 TelephonyManager 提供设备上获取通讯服务信息的入口,应用程序使用这个类的方法来获取电话的服务商或者状态.程序也可以注册一个监听器来监听电话状态的改变. 不需要直接实例化这个类,使用Context.getSystemS