美文网首页
【AddressBook】ABAddressBook - 通讯录

【AddressBook】ABAddressBook - 通讯录

作者: 居然是村长 | 来源:发表于2016-06-15 23:13 被阅读70次

旧版的通讯录

简单介绍

ABAddressBook:通讯录
ABRecord:信息(联系人信息)
ABPerson:个人
ABGroup:组
ABMultiValue:多个数据(例如:手机号)

授权

 // 授权状态
    ABAuthorizationStatus status = ABAddressBookGetAuthorizationStatus();

    typedef CF_ENUM(CFIndex, ABAuthorizationStatus) {
        kABAuthorizationStatusNotDetermined = 0,   // 未知
        kABAuthorizationStatusRestricted,          // 限制
        kABAuthorizationStatusDenied,              // 拒绝
        kABAuthorizationStatusAuthorized           // 允许
    };
    
    ABAddressBookRef addressBook = NULL;
    if (status == kABAuthorizationStatusNotDetermined) {
        // 如果是未知状态:获取权限
        ABAddressBookRequestAccessWithCompletion(addressBook, ^(bool granted, CFErrorRef error) {
            if (granted) {
                //权限得到允许
            }
        });
    } else {
        // 其他状态,再判断提示...
    }
    CFRelease(addressBook);

创建通讯录

    // 创建通讯录实例
    ABAddressBookRef addressBook = ABAddressBookCreate();    
    ABAddressBookRef add = ABAddressBookCreateWithOptions(NULL, NULL);

    // 创建成功 回调
    ABAddressBookRequestAccessWithCompletion(addressBook, ^(bool granted, CFErrorRef error) {
        if (granted) {
            NSLog(@"创建通讯录成功");
        }
    });

    // 使用通讯录实例,可以查询各种信息了

通讯录操作

  • 修改信息
    // 检查修改信息后,是否保存(修改 ABRecordSetValue...)
    if (ABAddressBookHasUnsavedChanges(addressBook)) {
        NSLog(@"存在为保存的记录");
    }

 // 保存
    if (ABAddressBookSave(addressBook, NULL)) {
        NSLog(@"保存成功");
    }

  • 新增 移除
        ABAddressBookAddRecord(addressBook, person, NULL);
        ABAddressBookRemoveRecord(addressBook, person, NULL);

通知

// 通知 通讯录变化
void (externalChangeCallback)(ABAddressBookRef addressBook, CFDictionaryRef info, void *context) {
    NSLog(@"变化了?");
}


    // 注册通知
    ABAddressBookRegisterExternalChangeCallback(addressBook, externalChangeCallback, NULL);
    
    // 移除通知
    ABAddressBookUnregisterExternalChangeCallback(addressBook, externalChangeCallback, NULL);
    

其他


// 添加本地化
  AB_EXTERN CFStringRef ABAddressBookCopyLocalizedLabel(CFStringRef label) AB_DEPRECATED("use [CNLabeledValue localizedStringForLabel:]");
 
// 回滚
AB_EXTERN void ABAddressBookRevert(ABAddressBookRef addressBook) AB_DEPRECATED("refetch CN objects");

1

相关文章

网友评论

      本文标题:【AddressBook】ABAddressBook - 通讯录

      本文链接:https://www.haomeiwen.com/subject/cojpdttx.html