AddressBook.framework
1.純C語言的API,僅僅提供聯(lián)系人數(shù)據(jù)
2.沒有提供UI界面展示,需要自己搭建聯(lián)系人展示界面
3.里面數(shù)據(jù)類型大部分基于CoreFoundation框架
--從iOS6開始,需要得到用戶的授權(quán)才能訪問通訊錄,因此在使用之前,需要檢查用戶是否已經(jīng)授權(quán)
--獲取通訊錄狀態(tài) ABAddressBookGetAuthorizationStatus()
1.在需要的界面導(dǎo)入框架
//導(dǎo)入框架
#import <AddressBook/AddressBook.h>
2.在AppDelegate里面判斷授權(quán)狀態(tài)進(jìn)行授權(quán)
#pragma mark 判斷授權(quán)狀態(tài) 進(jìn)行授權(quán)
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
/**
kABAuthorizationStatusNotDetermined = 0,//不確定
kABAuthorizationStatusRestricted, //特殊原因不能訪問通訊
kABAuthorizationStatusDenied, //拒絕訪問
kABAuthorizationStatusAuthorized //已經(jīng)授權(quán)
*/
//1 獲取用戶的授權(quán)狀態(tài)
ABAuthorizationStatus statue = ABAddressBookGetAuthorizationStatus();
//2如果用戶的授權(quán)狀態(tài)是未決定的 則請求授權(quán)
if (statue == kABAuthorizationStatusNotDetermined) {
//2.1 獲取用戶通訊錄對象
ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, NULL);
//2.2 請求授權(quán)
ABAddressBookRequestAccessWithCompletion(addressBook, ^(bool granted, CFErrorRef error) {
// 用戶決定之后來到block
if (granted == YES) {
NSLog(@"用戶授權(quán)成功");
}else{
NSLog(@"用戶授權(quán)失敗");
}
});
}
return YES;
}
3.獲取聯(lián)系人信息
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
//判斷授權(quán)狀態(tài)
//1 獲取用戶的授權(quán)狀態(tài)
ABAuthorizationStatus statue = ABAddressBookGetAuthorizationStatus();
//2 如果用戶的授權(quán)狀態(tài)是未決定的 則請求授權(quán)
if (statue != kABAuthorizationStatusAuthorized) return;//沒有授權(quán)直接返回
//3 獲取通訊錄對象
ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, NULL);
//4 獲取所有聯(lián)系人記錄
CFArrayRef peopleArray = ABAddressBookCopyArrayOfAllPeople(addressBook);
//5 遍歷所有聯(lián)系人記錄
CFIndex peopleCount = CFArrayGetCount(peopleArray);
for (CFIndex i = 0; i < peopleCount; i++) {
//5.1 獲取到聯(lián)系人
ABRecordRef person = CFArrayGetValueAtIndex(peopleArray, i);
//5.2 獲取聯(lián)系人姓名
NSString *firstName = (__bridge_transfer NSString *)(ABRecordCopyValue(person, kABPersonFirstNameProperty));
NSString *lastName = (__bridge_transfer NSString *)(ABRecordCopyValue(person, kABPersonLastNameProperty));
NSLog(@"--%@--%@",firstName,lastName);
//5.3 獲取聯(lián)系人的電話
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);
}