iOS开发获取手机通讯录中的电话号码和姓名
来源:互联网 发布:怎么抹除iphone数据 编辑:程序博客网 时间:2024/04/29 17:31
1、申请授权
- <span style=“font-size:14px;”>#import “AppDelegate.h”
- #import <AddressBook/AddressBook.h>
- @interface AppDelegate ()
- @end
- @implementation AppDelegate
- - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
- // Override point for customization after application launch.
- [self requestAuthorizationAddressBook];
- return YES;
- }
- - (void)requestAuthorizationAddressBook {
- // 判断是否授权
- ABAuthorizationStatus authorizationStatus = ABAddressBookGetAuthorizationStatus();
- if (authorizationStatus == kABAuthorizationStatusNotDetermined) {
- // 请求授权
- ABAddressBookRef addressBookRef = ABAddressBookCreate();
- ABAddressBookRequestAccessWithCompletion(addressBookRef, ^(bool granted, CFErrorRef error) {
- if (granted) { // 授权成功
- } else { // 授权失败
- NSLog(@”授权失败!”);
- }
- });
- }
- }
- @end</span>
#import "AppDelegate.h"
#import <AddressBook/AddressBook.h>@interface AppDelegate ()@end@implementation AppDelegate- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // Override point for customization after application launch. [self requestAuthorizationAddressBook]; return YES;}- (void)requestAuthorizationAddressBook { // 判断是否授权 ABAuthorizationStatus authorizationStatus = ABAddressBookGetAuthorizationStatus(); if (authorizationStatus == kABAuthorizationStatusNotDetermined) { // 请求授权 ABAddressBookRef addressBookRef = ABAddressBookCreate(); ABAddressBookRequestAccessWithCompletion(addressBookRef, ^(bool granted, CFErrorRef error) { if (granted) { // 授权成功 } else { // 授权失败 NSLog(@"授权失败!"); } }); }}@end2、iOS10之后需要在Info.plist中配置NSContactsUsageDescription
- <key>NSContactsUsageDescription</key>
- <string>请求访问通讯录</string>
<key>NSContactsUsageDescription</key><string>请求访问通讯录</string>
3、请求访问并获取通讯录
3.1、导入头文件
#import <AddressBook/AddressBook.h>
3.2、访问并获取
- - (void)getAddressBookClick{
- ABAddressBookRef addressBook = ABAddressBookCreate();
- //用户授权
- if (ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusNotDetermined) {//首次访问通讯录
- ABAddressBookRequestAccessWithCompletion(addressBook, ^(bool granted, CFErrorRef error) {
- if (!error) {
- if (granted) {//允许
- NSArray *contacts = [self fetchContactWithAddressBook:addressBook];
- dispatch_async(dispatch_get_main_queue(), ^{
- NSLog(@”\n contacts:%@”, contacts);
- });
- }else{//拒绝
- NSLog(@”拒绝”);
- }
- }else{
- NSLog(@”错误!”);
- }
- });
- }else{//非首次访问通讯录
- NSArray *contacts = [self fetchContactWithAddressBook:addressBook];
- dispatch_async(dispatch_get_main_queue(), ^{
- NSLog(@”\n contacts:%@”, contacts);
- });
- }
- }
- - (NSMutableArray *)fetchContactWithAddressBook:(ABAddressBookRef)addressBook{
- if (ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusAuthorized) {////有权限访问
- //获取联系人数组
- NSArray *array = (__bridge NSArray *)ABAddressBookCopyArrayOfAllPeople(addressBook);
- NSMutableArray *contacts = [NSMutableArray array];
- for (int i = 0; i < array.count; i++) {
- //获取联系人
- ABRecordRef people = CFArrayGetValueAtIndex((__bridge ABRecordRef)array, i);
- //获取联系人详细信息,如:姓名,电话,住址等信息
- NSString *firstName = (__bridge NSString *)ABRecordCopyValue(people, kABPersonFirstNameProperty);
- NSString *lastName = (__bridge NSString *)ABRecordCopyValue(people, kABPersonLastNameProperty);
- //判断姓名null
- NSString *allName;
- if ([CommandHelp checkStringIsNull:lastName] && [CommandHelp checkStringIsNull:firstName]) {
- allName = [NSString stringWithFormat:@”%@%@”,lastName,firstName];
- }else if([CommandHelp checkStringIsNull:firstName]){
- allName = firstName;
- }else if ([CommandHelp checkStringIsNull:lastName]){
- allName = lastName;
- }else{
- allName = @”“;
- }
- ABMutableMultiValueRef phoneNumRef = ABRecordCopyValue(people, kABPersonPhoneProperty);
- NSString *phoneNumber = ((__bridge NSArray *)ABMultiValueCopyArrayOfAllValues(phoneNumRef)).lastObject;
- //判断手机号null
- NSString *phone;
- if ([CommandHelp checkStringIsNull:phoneNumber]) {
- phone = phoneNumber;
- }else{
- phone = @”“;
- }
- //如果不加上面的判断,这里加入数组的时候会出错,不会判断(null)这个东西,所以要先排除
- [contacts addObject:@{@”name”: allName, @”phoneNumber”: phone}];
- }
- return contacts;
- }else{//无权限访问
- //提示授权
- UIAlertView * alart = [[UIAlertView alloc]initWithTitle:@”温馨提示” message:@”请您设置允许APP访问您的通讯录\n设置-隐私-通讯录” delegate:self cancelButtonTitle:@”确定” otherButtonTitles:nil, nil nil];
- [alart show];
- return nil;
- }
- }
- (void)getAddressBookClick{ ABAddressBookRef addressBook = ABAddressBookCreate(); //用户授权 if (ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusNotDetermined) {//首次访问通讯录 ABAddressBookRequestAccessWithCompletion(addressBook, ^(bool granted, CFErrorRef error) { if (!error) { if (granted) {//允许 NSArray *contacts = [self fetchContactWithAddressBook:addressBook]; dispatch_async(dispatch_get_main_queue(), ^{ NSLog(@"\n contacts:%@", contacts); }); }else{//拒绝 NSLog(@"拒绝"); } }else{ NSLog(@"错误!"); } }); }else{//非首次访问通讯录 NSArray *contacts = [self fetchContactWithAddressBook:addressBook]; dispatch_async(dispatch_get_main_queue(), ^{ NSLog(@"\n contacts:%@", contacts); }); }}- (NSMutableArray *)fetchContactWithAddressBook:(ABAddressBookRef)addressBook{ if (ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusAuthorized) {////有权限访问 //获取联系人数组 NSArray *array = (__bridge NSArray *)ABAddressBookCopyArrayOfAllPeople(addressBook); NSMutableArray *contacts = [NSMutableArray array]; for (int i = 0; i < array.count; i++) { //获取联系人 ABRecordRef people = CFArrayGetValueAtIndex((__bridge ABRecordRef)array, i); //获取联系人详细信息,如:姓名,电话,住址等信息 NSString *firstName = (__bridge NSString *)ABRecordCopyValue(people, kABPersonFirstNameProperty); NSString *lastName = (__bridge NSString *)ABRecordCopyValue(people, kABPersonLastNameProperty); //判断姓名null NSString *allName; if ([CommandHelp checkStringIsNull:lastName] && [CommandHelp checkStringIsNull:firstName]) { allName = [NSString stringWithFormat:@"%@%@",lastName,firstName]; }else if([CommandHelp checkStringIsNull:firstName]){ allName = firstName; }else if ([CommandHelp checkStringIsNull:lastName]){ allName = lastName; }else{ allName = @""; } ABMutableMultiValueRef phoneNumRef = ABRecordCopyValue(people, kABPersonPhoneProperty); NSString *phoneNumber = ((__bridge NSArray *)ABMultiValueCopyArrayOfAllValues(phoneNumRef)).lastObject; //判断手机号null NSString *phone; if ([CommandHelp checkStringIsNull:phoneNumber]) { phone = phoneNumber; }else{ phone = @""; } //如果不加上面的判断,这里加入数组的时候会出错,不会判断(null)这个东西,所以要先排除 [contacts addObject:@{@"name": allName, @"phoneNumber": phone}]; } return contacts; }else{//无权限访问 //提示授权 UIAlertView * alart = [[UIAlertView alloc]initWithTitle:@"温馨提示" message:@"请您设置允许APP访问您的通讯录\n设置-隐私-通讯录" delegate:self cancelButtonTitle:@"确定" otherButtonTitles:nil, nil]; [alart show]; return nil; }}
4、获取数据示例
阅读全文
0 0
- iOS开发获取手机通讯录中的电话号码和姓名
- iOS开发获取手机通讯录中的电话号码和姓名
- iOS调用系统通讯录获取姓名电话号码
- iOS 调用系统通讯录获取姓名电话号码
- android手机获取联系人姓名和电话号码
- iOS开发调用系统通讯录获取电话号码
- ios 通讯录 通过电话号码 查询姓名
- ios 通讯录 通过电话号码 查询姓名
- IOS开发 获取手机通讯录
- 获取手机联系人信息(姓名 电话号码)
- Android简单获取手机联系人姓名电话号码
- Android中自制通讯录中显示出数据库中的姓名和电话号码进行打电话
- ios开发:获取手机通讯录、发送短信
- 获取手机通讯录里的电话号码
- iOS 获取手机通讯录
- 获取手机通讯录 iOS
- iOS获取手机通讯录
- android:获取手机号码和姓名实现通讯录
- Android 仿微信朋友圈查看
- iOS_使用LAContext实现TouchID(指纹识别)的使用
- JAVA——逻辑运算符
- Unity面试题
- 设计模式-模板方法模式
- iOS开发获取手机通讯录中的电话号码和姓名
- go rpc 简单用法
- GO中time.After释放的问题
- Android 沉浸式设计时输入法弹出ToolBar被拉伸
- JSON文件导入MySQL数据库的开源工具
- 微信浏览器缓存问题
- 1168: 账单(指针专题)
- Web应用扫描测试工具Vega
- DNA计算