通讯录

要访问通讯录,可以使用 AddressBook.framework 框架:

#import <AddressBook/AddressBook.h>


1、授权,建议写在 application: didFinishLaunchingWithOptions: 方法中:

// 创建一个通讯录实例
    ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, NULL);
    
    // 请求通讯录授权
    ABAddressBookRequestAccessWithCompletion(addressBook, ^(bool granted, CFErrorRef error) {
        if (granted) {
            NSLog(@"允许访问");
        } else {
            NSLog(@"不允许访问");
        }
    });
    
    CFRelease(addressBook);


2、访问通讯录:

// 创建一个通讯录实例
    ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, NULL);
    
    // 获得所有联系人数据
    NSArray *peopleArray =  (__bridge NSArray *)(ABAddressBookCopyArrayOfAllPeople(addressBook));
    NSInteger peopleCount = peopleArray.count;
    
    for (int i = 0; i < peopleCount; i++) {
        ABRecordRef people = (__bridge ABRecordRef)(peopleArray[i]);
        NSString *firstName = (__bridge NSString *)(ABRecordCopyValue(people, kABPersonFirstNameProperty));
        NSString *lastName = (__bridge NSString *)(ABRecordCopyValue(people, kABPersonLastNameProperty));
        
        NSLog(@"%@ %@", firstName, lastName);
        
        // 获取联系人电话
        ABMultiValueRef phone = ABRecordCopyValue(people, kABPersonPhoneProperty);
        CFIndex phoneCount = ABMultiValueGetCount(phone);
        
        for (int j = 0; j < phoneCount; j++) {
            NSString *phoneLabel = (__bridge NSString *)(ABAddressBookCopyLocalizedLabel(ABMultiValueCopyLabelAtIndex(phone, j)));
            NSString *phoneValue = (__bridge NSString *)(ABMultiValueCopyValueAtIndex(phone, j));
            NSLog(@"%@:%@", phoneLabel, phoneValue);
        }
        
        // 可以使用 ABPersonCopyImageData 获取头像
        
        CFRelease(phone);
    }
    
    CFRelease(addressBook);


3、修改联系人信息:

// 创建一个通讯录实例
    ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, NULL);
    
    // 获得所有联系人数据
    NSArray *peopleArray =  (__bridge NSArray *)(ABAddressBookCopyArrayOfAllPeople(addressBook));
    
    // 拿到通讯录第一个联系人
    ABRecordRef people = (__bridge ABRecordRef)(peopleArray[0]);
    ABMultiValueRef phone = ABMultiValueCreateMutable(kABMultiStringPropertyType);
    ABMultiValueAddValueAndLabel(phone, @"18511112222", kABPersonPhoneMobileLabel, NULL);
    
    // 修改手机号
    ABRecordSetValue(people, kABPersonPhoneProperty, phone, NULL);
    
    // 保存
    ABAddressBookSave(addressBook, NULL);
    
    CFRelease(addressBook);


4、添加联系人:

// 创建一个通讯录实例
    ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, NULL);
    
    // 创建联系人
    ABRecordRef person = ABPersonCreate();
    
    // 设置联系人属性
    ABRecordSetValue(person, kABPersonFirstNameProperty, @"三", NULL);
    ABRecordSetValue(person, kABPersonLastNameProperty, @"张", NULL);
    
    ABMultiValueRef phone = ABMultiValueCreateMutable(kABMultiStringPropertyType);
    ABMultiValueAddValueAndLabel(phone, @"18711112222", kABPersonPhoneMobileLabel, NULL);
    ABRecordSetValue(person, kABPersonPhoneProperty, phone, NULL);
    
    // 设置头像
    UIImage *image = [UIImage imageNamed:@"user_default"];
    NSData *imageData = UIImagePNGRepresentation(image);
    ABPersonSetImageData(person, (__bridge CFDataRef)(imageData), NULL);
    
    // 添加联系人到通讯录并保存
    ABAddressBookAddRecord(addressBook, person, NULL);
    ABAddressBookSave(addressBook, NULL);
    
    CFRelease(phone);
    CFRelease(person);
    CFRelease(addressBook);


5、删除联系人:

// 创建一个通讯录实例
    ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, NULL);
    
    // 获得所有联系人数据
    NSArray *peopleArray =  (__bridge NSArray *)(ABAddressBookCopyArrayOfAllPeople(addressBook));
    
    // 拿到通讯录最后一个联系人
    ABRecordRef people = (__bridge ABRecordRef)(peopleArray.lastObject);
    
    // 删除联系人
    ABAddressBookRemoveRecord(addressBook, people, NULL);
    
    ABAddressBookSave(addressBook, NULL);
    
    CFRelease(addressBook);


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值