获取手机通讯录 iOS
来源:互联网 发布:海康威视mac客户端 编辑:程序博客网 时间:2024/05/15 00:17
iOS9之前用ABAddressBookRef获取通讯录内容,在iOS9之后(包括iOS9)用CNContactStore获取通讯录内容。并且在获取通讯录内容之前要先授权。
#pragma mark -- 授权//授权+ (void)addressBookAuthorization:(AddressBookInfoBlock)block{ if(iOS9_LATER) //在iOS9之后获取通讯录用CNContactStore { //已经授权了 直接返回 if([CNContactStore authorizationStatusForEntityType:CNEntityTypeContacts] == CNAuthorizationStatusAuthorized) { [self fetchAddressBookInformation:block]; return; } CNContactStore *contactStore = [[CNContactStore alloc] init]; [contactStore requestAccessForEntityType:CNEntityTypeContacts completionHandler:^(BOOL granted, NSError * _Nullable error) { if(granted){ [self fetchAddressBookInformation:block]; NSLog(@"授权成功"); } else{ [self showAlert]; NSLog(@"授权失败"); } }]; } else //在iOS9之前 用ABAddressBookRef获取通讯录 {#pragma clang diagnostic push#pragma clang diagnostic ignored "-Wdeprecated-declarations" ABAuthorizationStatus status = ABAddressBookGetAuthorizationStatus(); if(status == kABAuthorizationStatusAuthorized) //已经授权了 直接返回 { [self fetchAddressBookInformation:block]; return; } ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, NULL); ABAddressBookRequestAccessWithCompletion(addressBook, ^(bool granted, CFErrorRef error) { if(granted){ [self fetchAddressBookInformation:block]; NSLog(@"授权成功"); } else{ [self showAlert]; NSLog(@"授权失败"); } });#pragma clang diagnostic pop }}#pragma mark -- 获取联系人信息/** * 获取通讯录中信息 */+ (void)fetchAddressBookInformation:(AddressBookInfoBlock)block{ if(iOS9_LATER){ [self fetchAddressBookInformationWhenSystemVersionIsiOS9_later:block]; } else{ [self fetchAddressBookInformationWhenSystemVersionIsiOS9_before:block]; }}/** * iOS9之后获取通讯录信息的方法 */+ (void)fetchAddressBookInformationWhenSystemVersionIsiOS9_later:(AddressBookInfoBlock)block{ NSMutableArray *array = [[NSMutableArray alloc] init]; CNContactStore *contactStore = [[CNContactStore alloc] init]; //由keys决定获取联系人的那些信息:姓名 手机号 NSArray *keys = @[CNContactGivenNameKey, CNContactFamilyNameKey, CNContactPhoneNumbersKey]; CNContactFetchRequest *request = [[CNContactFetchRequest alloc] initWithKeysToFetch:keys]; NSError *error = nil; [contactStore enumerateContactsWithFetchRequest:request error:&error usingBlock:^(CNContact * _Nonnull contact, BOOL * _Nonnull stop) { PersonInfoModel *model = [[PersonInfoModel alloc] init]; //联系人姓名 NSString *name = [NSString stringWithFormat:@"%@%@", contact.familyName ? contact.familyName : @"", contact.givenName ? contact.givenName : @""]; model.personName = name ? name :@"你叫啥呢"; //联系人每个拼音首字母 model.personNameHeadLetter = [[PinYinForObjc chineseConvertToPinYinHead:model.personName] uppercaseString]; //联系人手机号 NSArray *phones = contact.phoneNumbers; for(CNLabeledValue *labeledValue in phones) { CNPhoneNumber *phone = labeledValue.value; [model.personPhone addObject:(phone.stringValue ? phone.stringValue : @"我也不知道")]; } [array addObject:model]; }]; //把获取到的联系人信息传过去 block(array);}/** * iOS9之前获取通讯录信息的方法 */+ (void)fetchAddressBookInformationWhenSystemVersionIsiOS9_before:(AddressBookInfoBlock)block{#pragma clang diagnostic push#pragma clang diagnostic ignored "-Wdeprecated-declarations" NSMutableArray *array = [[NSMutableArray alloc] init]; //创建通讯录对象 ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, NULL); //从通讯录中将所有人的信息拷贝出来 CFArrayRef allPersonInfoArray = ABAddressBookCopyArrayOfAllPeople(addressBook); //获取联系人的个数 CFIndex personCount = CFArrayGetCount(allPersonInfoArray); for(int i=0; i<personCount; i++) { PersonInfoModel *model = [[PersonInfoModel alloc] init]; //获取其中每个联系人的信息 ABRecordRef person = CFArrayGetValueAtIndex(allPersonInfoArray, i); //联系人姓名 NSString *lastName = (__bridge_transfer NSString *)ABRecordCopyValue(person, kABPersonLastNameProperty); NSString *firstName = (__bridge_transfer NSString *)ABRecordCopyValue(person, kABPersonFirstNameProperty); NSString *name = [NSString stringWithFormat:@"%@%@", lastName?lastName:@"", firstName?firstName:@""]; model.personName = name ? name : @"你叫啥呢"; //联系人每个拼音首字母 model.personNameHeadLetter = [[PinYinForObjc chineseConvertToPinYinHead:model.personName] uppercaseString]; //联系人电话 ABMultiValueRef phones = ABRecordCopyValue(person, kABPersonPhoneProperty); CFIndex phoneCout = ABMultiValueGetCount(phones); for(int j=0; j<phoneCout; j++) { NSString *phone = (__bridge_transfer NSString *)ABMultiValueCopyValueAtIndex(phones, i); [model.personPhone addObject:phone ? phone : @"我也不知道"]; } CFRelease(phones); [array addObject:model]; } //把获取到的联系人信息传过去 block(array); CFRelease(allPersonInfoArray); CFRelease(addressBook);#pragma clang diagnostic pop}
也可到:https://github.com/zhaoName/BlurrySearch下载。
0 0
- iOS 获取手机通讯录
- 获取手机通讯录 iOS
- iOS获取手机通讯录
- IOS开发 获取手机通讯录
- iOS之获取手机通讯录
- iOS 获取手机通讯录联系电话
- ios开发:获取手机通讯录、发送短信
- iOS-JNAddressBook 获取手机通讯录信息
- iOS - ABPeoplePickerNavigationController 获取手机通讯录信息
- iOS 获取手机通讯录,高度自定义。
- iOS 获取手机通讯录的联系人
- 获取手机通讯录
- 获取手机通讯录
- Android 获取手机通讯录
- 获取手机通讯录
- 获取手机通讯录信息
- 获取手机通讯录联系人
- 获取手机通讯录
- hdu5927Auxiliary Set(dfs)2016东北赛现场赛
- git取消merging
- 那些年的互撸娃
- matlab识别中心点
- 【汇总】华南师范大学计算机学院2010-2016年考研分数
- 获取手机通讯录 iOS
- Mac下的Jenkins启动与停止
- Android基础知识总结
- eclipse安装activiti5.17.0工作流插件
- 你不可不知的static(1)-引入及特点
- RecyclerView实现列表倒序排列
- shell实例手册
- AndroidManifest.xml中一些常用的属性
- dos执行exp命令和imp命令