iOS-AddressBook通讯录

AddressBook.framework

1.纯C语言的API,仅仅提供联系人数据
2.没有提供UI界面展示,需要自己搭建联系人展示界面
3.里面数据类型大部分基于CoreFoundation框架
--从iOS6开始,需要得到用户的授权才能访问通讯录,因此在使用之前,需要检查用户是否已经授权
--获取通讯录状态 ABAddressBookGetAuthorizationStatus()

1.在需要的界面导入框架

//导入框架
#import <AddressBook/AddressBook.h>

2.在AppDelegate里面判断授权状态进行授权

#pragma mark 判断授权状态 进行授权
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    /**
     kABAuthorizationStatusNotDetermined = 0,//不确定
     kABAuthorizationStatusRestricted,    //特殊原因不能访问通讯
     kABAuthorizationStatusDenied,      //拒绝访问
     kABAuthorizationStatusAuthorized    //已经授权
     */
    //1 获取用户的授权状态
    ABAuthorizationStatus statue =  ABAddressBookGetAuthorizationStatus();
    //2如果用户的授权状态是未决定的 则请求授权
    if (statue == kABAuthorizationStatusNotDetermined) {
        //2.1 获取用户通讯录对象
        ABAddressBookRef addressBook =  ABAddressBookCreateWithOptions(NULL, NULL);
        //2.2 请求授权
        ABAddressBookRequestAccessWithCompletion(addressBook, ^(bool granted, CFErrorRef error) {
            // 用户决定之后来到block
            if (granted == YES) {
                NSLog(@"用户授权成功");
            }else{
                NSLog(@"用户授权失败");
            }
        });
    }

    return YES;
}

3.获取联系人信息

-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
    //判断授权状态
    //1 获取用户的授权状态
    ABAuthorizationStatus statue =  ABAddressBookGetAuthorizationStatus();
    //2 如果用户的授权状态是未决定的 则请求授权
    if (statue != kABAuthorizationStatusAuthorized) return;//没有授权直接返回
    //3 获取通讯录对象
    ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, NULL);
    //4 获取所有联系人记录
    CFArrayRef peopleArray =  ABAddressBookCopyArrayOfAllPeople(addressBook);
    //5 遍历所有联系人记录
    CFIndex peopleCount = CFArrayGetCount(peopleArray);
    for (CFIndex i = 0; i < peopleCount; i++) {
        //5.1 获取到联系人
        ABRecordRef person =  CFArrayGetValueAtIndex(peopleArray, i);
        //5.2 获取联系人姓名
        NSString *firstName = (__bridge_transfer NSString *)(ABRecordCopyValue(person, kABPersonFirstNameProperty));
        NSString *lastName  = (__bridge_transfer NSString *)(ABRecordCopyValue(person, kABPersonLastNameProperty));
        NSLog(@"--%@--%@",firstName,lastName);
        //5.3 获取联系人的电话
       ABMultiValueRef phones =  ABRecordCopyValue(person, kABPersonPhoneProperty);
        CFIndex phonesCount = ABMultiValueGetCount(phones);
        for (CFIndex j = 0 ; j < phonesCount; j++) {
        NSString *phoneLabel = (__bridge_transfer NSString *) ABMultiValueCopyLabelAtIndex(phones, j);
        NSString *phoneValue = (__bridge_transfer NSString *) ABMultiValueCopyValueAtIndex(phones, j);
         NSLog(@"---%@---%@",phoneLabel,phoneValue);
        }
        //5.4 释放该释放的对象
        CFRelease(phones);
    }
    //6 释放该释放的对象
    CFRelease(addressBook);
    CFRelease(peopleArray);
    
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 如何访问用户的通讯录 在iOS中,有2个框架可以访问用户的通讯录 AddressBookUI.framework ...
    JonesCxy阅读 794评论 0 2
  • 在ios中,有两个框架可以访问用户的通讯录 AddressBookUI.framework提供了联系人列表界面, ...
    Manba_小洛阅读 990评论 4 12
  • 通讯录简介 通讯录使用场景: 电商类的 App,设置收货人电话号码。 即时通讯类 App,添加手机联系人好友。 通...
    LeeJay阅读 24,790评论 43 107
  • 阿尔法宇宙阅读 322评论 7 5
  • 念念不忘 是细雨蒙蒙的一把花伞 撑伞的人背影朦胧 雨意绵长 牵扯出对你的思念 伞如花瓣 遮住了你的面庞 水珠滑落脸...
    荒城F阅读 465评论 1 1