iOS 通讯录-获取联系人属性

来源:互联网 发布:网络销售代理合同范本 编辑:程序博客网 时间:2024/05/16 23:47

现在写一下读取联系人数据相关操作

要读取通讯录数据库 需要

创建通讯录对象查询获取数据(所有或者部分)获取通讯录某一条记录(某个人的所有数据)获取这个人的各种属性数据 就是这样
?
1
2
3
CFErrorRef error = NULL;
   //创建一个通讯录操作对象
   ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, &error);

第一参数是保留参数,传递NULL即可; 
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//查找联系人
- (void)filterContentForSearchText:(NSString *)searchText
{
    //判断授权状态
    if(ABAddressBookGetAuthorizationStatus()!=kABAuthorizationStatusAuthorized) {
        return;
    }
    CFErrorRef error = NULL;
    ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, &error);
    if(searchText.length == 0) {
        //查找所有
        listContacts = CFBridgingRelease(ABAddressBookCopyArrayOfAllPeople(addressBook));
    }
    else{
        //根据字符串查找前缀关键字
        CFStringRef cfSearchText = (CFStringRef)CFBridgingRetain(searchText);
        listContacts = CFBridgingRelease(ABAddressBookCopyPeopleWithName(addressBook, cfSearchText));
        CFRelease(cfSearchText);
    }
    //这里应该刷新表格
    [self.tableView reloadData];
    CFRelease(addressBook);
}
?
1
 
?
1
2
3
4
5
授权的状态:
   kABAuthorizationStatusNotDetermined  用户还没有决定
   kABAuthorizationStatusRestricted,    受限制
   kABAuthorizationStatusDenied,    拒绝
   kABAuthorizationStatusAuthorized 许可
?
1
 
?
1
联系人的属性
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<preclass="brush:java;">kABPersonFirstNameProperty;         // 名字
kABPersonLastNameProperty;          // 姓氏
kABPersonMiddleNameProperty;        // 中间名
kABPersonPrefixProperty;            // 前缀
kABPersonSuffixProperty;            // 后缀
kABPersonNicknameProperty;          // 昵称
kABPersonFirstNamePhoneticProperty; // 名字的汉语拼音或者音标
kABPersonLastNamePhoneticProperty;  // 姓氏汉语拼音或者音标
kABPersonMiddleNamePhoneticProperty;// 中间名的汉语拼音或者音标
kABPersonOrganizationProperty;      // 组织名
kABPersonJobTitleProperty;          // 工作头衔
kABPersonDepartmentProperty;        // 部门
kABPersonNoteProperty;              // 备注
kABPersonBirthdayProperty;          // 生日
kABPersonCreationDateProperty;      // 创建时间
kABPersonModificationDateProperty;  // 修改日期</pre><pre class="brush:java;"></pre><pre class="brush:java;">    //多值属性 (一个属性中又多个值) 有标签、值、id
    kABPersonPhoneProperty ;        //电话号码属性           kABMultiStringPropertyType;//类型
    kABPersonEmailProperty ;        //e-mail属性            kABMultiStringPropertyType;//类型
    kABPersonURLProperty ;          //URL属性               kABMultiStringPropertyType;//类型
    kABPersonRelatedNamesProperty; // 亲属关系人属性         kABMultiStringPropertyType;//类型
    kABPersonAddressProperty ;      //地址属性               kABMultiDictionaryPropertyType;//类型
    kABPersonInstantMessageProperty;//及时聊天属性            kABMultiDictionaryPropertyType;//类型
    kABPersonSocialProfileProperty;//社交账号属性            kABMultiDictionaryPropertyTypel;//类型</pre><br>利用上面的属性来查找想要的值
?
1
下面是单值属性:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    staticNSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if(cell) {
        cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }
    //从搜索出的联系人数组中获取一条数据 转换为ABRecordRef格式
    ABRecordRef thisPerson = CFBridgingRetain([listContacts objectAtIndex:[indexPath row]]);
    //查找这条记录中的名字
    NSString *firstName = CFBridgingRelease(ABRecordCopyValue(thisPerson, kABPersonFirstNameProperty));
    firstName = firstName != nil? firstName:@"";
    //查找这条记录中的姓氏
    NSString *lastName = CFBridgingRelease(ABRecordCopyValue(thisPerson, kABPersonLastNameProperty));
    cell.textLabel.text = [NSString stringWithFormat:@"%@%@",firstName,lastName];
    CFRelease(thisPerson);
    returncell;
 
}


下面是多值属性的查找方法:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//获取多值属性
- (void)multiValueProperty
{
    ABRecordID personRecordID = [personIDASNumber intValue];//personIDASNumber是NSNumber类型的值用来保存RecordID的值
    CFErrorRef error = NULL;
    ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, &error);
    //通过ABRecordID属性找到ABRecord
    ABRecordRef personRecord = ABAddressBookGetPersonWithRecordID(addressBook, personRecordID);
    //通过ABRecord 查找多值属性
    ABMultiValueRef emailProperty = ABRecordCopyValue(personRecord, kABPersonEmailProperty);
    //将多值属性的多个值转化为数组
    NSArray * emailArray = CFBridgingRelease(ABMultiValueCopyArrayOfAllValues(emailProperty));
    for(intindex = 0; index < emailArray.count; index++) {
        NSString *email = [emailArray objectAtIndex:index];
        NSString *emailLabel = CFBridgingRelease(ABMultiValueCopyLabelAtIndex(emailProperty, index));
        //判断当前这个值得标签
        if([emailLabel isEqualToString:(NSString *)kABWorkLabel]) {
            NSLog(@"%@", email);
        }
    }
}

获取联系人图片:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
//获取联系人的图片
- (void)setImage
{
    CFErrorRef error = NULL;
    ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, &error);
    ABRecordRef cecordRef = ABAddressBookGetPersonWithRecordID(addressBook,[personIDASNumber intValue]);
    //判断联系人是否有照片
    if(ABPersonHasImageData(cecordRef)) {
        //获取照片数据
        NSData *photoData = CFBridgingRelease(ABPersonCopyImageData(cecordRef));
        self.imageView.image = [UIImage imageWithData:photoData];
    }
}
0 0
原创粉丝点击