iOS开发获取手机通讯录中的电话号码和姓名

来源:互联网 发布:怎么抹除iphone数据 编辑:程序博客网 时间:2024/04/29 17:31

1、申请授权

[objc] view plain copy
print?在CODE上查看代码片派生到我的代码片
  1. <span style=“font-size:14px;”>#import “AppDelegate.h”  
  2. #import <AddressBook/AddressBook.h>  
  3.   
  4. @interface AppDelegate ()  
  5.   
  6. @end  
  7.   
  8. @implementation AppDelegate  
  9.   
  10. - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {  
  11.     // Override point for customization after application launch.  
  12.   
  13.     [self requestAuthorizationAddressBook];  
  14.     return YES;  
  15. }  
  16.   
  17.   
  18. - (void)requestAuthorizationAddressBook {  
  19.     // 判断是否授权  
  20.     ABAuthorizationStatus authorizationStatus = ABAddressBookGetAuthorizationStatus();  
  21.     if (authorizationStatus == kABAuthorizationStatusNotDetermined) {  
  22.         // 请求授权  
  23.         ABAddressBookRef addressBookRef =  ABAddressBookCreate();  
  24.         ABAddressBookRequestAccessWithCompletion(addressBookRef, ^(bool granted, CFErrorRef error) {  
  25.             if (granted) {  // 授权成功  
  26.   
  27.             } else {        // 授权失败  
  28.                 NSLog(@”授权失败!”);  
  29.             }  
  30.         });  
  31.     }  
  32. }  
  33. @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(@"授权失败!"); } }); }}@end

2、iOS10之后需要在Info.plist中配置NSContactsUsageDescription

[objc] view plain copy
print?在CODE上查看代码片派生到我的代码片
  1. <key>NSContactsUsageDescription</key>  
  2. <string>请求访问通讯录</string>   
<key>NSContactsUsageDescription</key><string>请求访问通讯录</string> 


3、请求访问并获取通讯录

3.1、导入头文件

#import <AddressBook/AddressBook.h>

3.2、访问并获取

[objc] view plain copy
print?在CODE上查看代码片派生到我的代码片
  1. - (void)getAddressBookClick{  
  2.       
  3.     ABAddressBookRef addressBook = ABAddressBookCreate();  
  4.     //用户授权  
  5.     if (ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusNotDetermined) {//首次访问通讯录  
  6.         ABAddressBookRequestAccessWithCompletion(addressBook, ^(bool granted, CFErrorRef error) {  
  7.             if (!error) {  
  8.                 if (granted) {//允许  
  9.                     NSArray *contacts = [self fetchContactWithAddressBook:addressBook];  
  10.                     dispatch_async(dispatch_get_main_queue(), ^{  
  11.                         NSLog(@”\n contacts:%@”, contacts);  
  12.                     });  
  13.                 }else{//拒绝  
  14.                     NSLog(@”拒绝”);  
  15.                 }  
  16.             }else{  
  17.                 NSLog(@”错误!”);  
  18.             }  
  19.         });  
  20.     }else{//非首次访问通讯录  
  21.          
  22.         NSArray *contacts = [self fetchContactWithAddressBook:addressBook];  
  23.         dispatch_async(dispatch_get_main_queue(), ^{  
  24.             NSLog(@”\n contacts:%@”, contacts);  
  25.         });  
  26.     }  
  27. }  
  28.   
  29. - (NSMutableArray *)fetchContactWithAddressBook:(ABAddressBookRef)addressBook{  
  30.     if (ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusAuthorized) {////有权限访问  
  31.         //获取联系人数组  
  32.         NSArray *array = (__bridge NSArray *)ABAddressBookCopyArrayOfAllPeople(addressBook);  
  33.         NSMutableArray *contacts = [NSMutableArray array];  
  34.         for (int i = 0; i < array.count; i++) {  
  35.             //获取联系人  
  36.             ABRecordRef people = CFArrayGetValueAtIndex((__bridge ABRecordRef)array, i);  
  37.             //获取联系人详细信息,如:姓名,电话,住址等信息  
  38.             NSString *firstName = (__bridge NSString *)ABRecordCopyValue(people, kABPersonFirstNameProperty);  
  39.             NSString *lastName = (__bridge NSString *)ABRecordCopyValue(people, kABPersonLastNameProperty);  
  40.           
  41.             //判断姓名null  
  42.             NSString *allName;  
  43.             if ([CommandHelp checkStringIsNull:lastName] && [CommandHelp checkStringIsNull:firstName]) {  
  44.                 allName = [NSString stringWithFormat:@”%@%@”,lastName,firstName];  
  45.             }else if([CommandHelp checkStringIsNull:firstName]){  
  46.                 allName = firstName;  
  47.             }else if ([CommandHelp checkStringIsNull:lastName]){  
  48.                 allName = lastName;  
  49.             }else{  
  50.                 allName = @”“;  
  51.             }  
  52.               
  53.             ABMutableMultiValueRef phoneNumRef = ABRecordCopyValue(people, kABPersonPhoneProperty);  
  54.             NSString *phoneNumber =  ((__bridge NSArray *)ABMultiValueCopyArrayOfAllValues(phoneNumRef)).lastObject;  
  55.             //判断手机号null  
  56.             NSString *phone;  
  57.             if ([CommandHelp checkStringIsNull:phoneNumber]) {  
  58.                 phone = phoneNumber;  
  59.             }else{  
  60.                 phone = @”“;  
  61.             }  
  62.               
  63.             //如果不加上面的判断,这里加入数组的时候会出错,不会判断(null)这个东西,所以要先排除  
  64.             [contacts addObject:@{@”name”: allName, @”phoneNumber”: phone}];  
  65.            
  66.         }  
  67.         return contacts;  
  68.     }else{//无权限访问  
  69.         //提示授权  
  70.         UIAlertView * alart = [[UIAlertView alloc]initWithTitle:@”温馨提示” message:@”请您设置允许APP访问您的通讯录\n设置-隐私-通讯录” delegate:self cancelButtonTitle:@”确定” otherButtonTitles:nil, nil nil];  
  71.         [alart show];  
  72.         return nil;  
  73.     }  
  74. }  
- (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、获取数据示例


原创粉丝点击