iOS获取手机通讯录方式方法(最新)
最近学习了iOS获取手机通讯录方式方法,现在分享给大家。希望此文章对各位有所帮助。
一、iOS9以前的通讯录框架
AddressBookUI框架:提供了联系人列表界面、联系人详情界面、添加联系人界面等,一般用于选择联系人。
AddressBook框架:纯C语言的API,仅仅是获得联系人数据。没有提供UI界面展示,需要自己搭建联系人展示界面。
二、iOS9以后最新通讯录框架
ContactsUI框架:拥有AddressBookUI框架的所有功能,使用起来更加的面向对象。
Contacts框架:拥有AddressBook框架的所有功能,不再是C语言的API,使用起来非常简单。
这次主要说下iOS9以后获取手机通讯录的方法:
所需框架
#import
遵循代理
1、请求授权判断
//判断当前的授权状态 if(status!=CNAuthorizationStatusAuthorized){ UIAlertView*alart=[[UIAlertViewalloc]initWithTitle:@"温馨提示"message:@"请您设置允许APP访问您的通讯录\n设置-隐私-通讯录"delegate:selfcancelButtonTitle:@"确定"otherButtonTitles:nil,nil]; return; }
这个说下几个授权状态,和AddressBook的差不多
typedefNS_ENUM(NSInteger,CNAuthorizationStatus) { /*!用户尚未就应用程序是否可以访问联系人数据做出选择。*/ CNAuthorizationStatusNotDetermined=0, /*!该应用程序没有权限访问联系人数据。 *用户无法更改此应用程序的状态,可能是由于主动限制(如父母控制到位)。*/ CNAuthorizationStatusRestricted, /*!用户明确拒绝对应用程序的联系人数据的访问。*/ CNAuthorizationStatusDenied, /*!该应用程序被授权访问联系人数据。*/ CNAuthorizationStatusAuthorized }
判断
//判断当前的授权状态是否是用户还未选择的状态 if(status==CNAuthorizationStatusNotDetermined) { CNContactStore*store=[CNContactStorenew]; [storerequestAccessForEntityType:CNEntityTypeContactscompletionHandler:^(BOOLgranted,NSError*_Nullableerror){ if(granted){ NSLog(@"授权成功!"); }else{ NSLog(@"授权失败!"); } }]; }
2、创建通讯录控制器
-(void)touchesBegan:(NSSet*)toucheswithEvent:(UIEvent*)event{ //iOS10 //AB_DEPRECATED("UseCNContactPickerViewControllerfromContactsUI.frameworkinstead") CNContactPickerViewController*contactVc=[CNContactPickerViewControllernew]; contactVc.delegate=self; [selfpresentViewController:contactVcanimated:YEScompletion:nil]; }
如果在iOS10的机器上调用以前的ABPeoplePickerNavigationController老方法将直接崩溃。所以如果还是用以前的方法,则需要加判断版本判断
3、实现代理方法,获取单人信息(1.点击姓名显示详情2.不显示详情)
//选择某个联系人时调用 -(void)contactPicker:(CNContactPickerViewController*)pickerdidSelectContactProperty:(CNContactProperty*)contactProperty { CNContact*contact=contactProperty.contact; NSString*name=[CNContactFormatterstringFromContact:contactstyle:CNContactFormatterStyleFullName]; CNPhoneNumber*phoneValue=contactProperty.value; NSString*phoneNumber=phoneValue.stringValue; NSLog(@"%@--%@",name,phoneNumber); }
代理方法说明
//1.选择联系人时使用(不展开详情) -(void)contactPicker:(CNContactPickerViewController*)pickerdidSelectContact:(CNContact*)contact; 注:如果有上面的方法,下面的方法不执行 //2.选择联系人某个属性时调用(展开详情) -(void)contactPicker:(CNContactPickerViewController*)pickerdidSelectContactProperty:(CNContactProperty*)contactProperty; //3.取消选中联系人时调用 -(void)contactPickerDidCancel:(CNContactPickerViewController*)picker;
4、取消选择的回调
-(void)contactPickerDidCancel:(CNContactPickerViewController*)picker{ [pickerdismissViewControllerAnimated:YEScompletion:nil]; }
到此上面的过程便可得到通讯录中一个人的信息,下面说一下获取手机的整体通讯录方法(获取全部联系人信息)
5、获取全部通讯录信息
//创建通讯录对象 CNContactStore*contactStore=[CNContactStorenew]; NSArray*keys=@[CNContactPhoneNumbersKey,CNContactGivenNameKey]; //获取通讯录中所有的联系人 CNContactFetchRequest*request=[[CNContactFetchRequestalloc]initWithKeysToFetch:keys]; [contactStoreenumerateContactsWithFetchRequest:requesterror:nilusingBlock:^(CNContact*_Nonnullcontact,BOOL*_Nonnullstop){ //获取姓名 //NSString*firstName=contact.familyName; NSString*lastName=contact.givenName; NSLog(@"name:%@",lastName); //获取电话号码 for(CNLabeledValue*labeledValueincontact.phoneNumbers){ CNPhoneNumber*phoneValue=labeledValue.value; NSString*phoneNumber=phoneValue.stringValue; NSLog(@"number:%@",phoneNumber); } }];
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。