iOS-AddressBook通訊錄

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);
    
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 如何訪問用戶的通訊錄 在iOS中,有2個(gè)框架可以訪問用戶的通訊錄 AddressBookUI.framework ...
    JonesCxy閱讀 853評論 0 2
  • 在ios中,有兩個(gè)框架可以訪問用戶的通訊錄 AddressBookUI.framework提供了聯(lián)系人列表界面, ...
    Manba_小洛閱讀 1,047評論 4 12
  • 通訊錄簡介 通訊錄使用場景: 電商類的 App,設(shè)置收貨人電話號碼。 即時(shí)通訊類 App,添加手機(jī)聯(lián)系人好友。 通...
    LeeJay閱讀 25,155評論 43 107
  • 阿爾法宇宙閱讀 363評論 7 5
  • 念念不忘 是細(xì)雨蒙蒙的一把花傘 撐傘的人背影朦朧 雨意綿長 牽扯出對你的思念 傘如花瓣 遮住了你的面龐 水珠滑落臉...
    荒城F閱讀 485評論 1 1

友情鏈接更多精彩內(nèi)容