iOS-通訊錄,ios通訊錄開發

來源:互聯網
上載者:User

iOS-通訊錄,ios通訊錄開發
1.概述:

* 對於每一個行動裝置而言,都有一個內建的資料庫-----通訊錄。

* 在IOS上,通訊錄放在SQLite3資料庫中。

* 由於不同應用之間不能直接存取,我們想要實現對資料庫的訪問,必須使用蘋果開放的API.

* 蘋果公司對資料訪問開放的API是AddressBook(低級API)和AddressBookUI(進階API).

* 為了安全考慮,訪問通訊錄需要經過使用者授權,僅需一次授權即可。

2.AddressBook 和 AddressBookUI的區別:

* AddressBook屬於低級API,可以擷取通訊錄中的資料,但是需要自構UI介面

* AddressBookUI屬於進階API,為我們提供了UI介面,使用起來比較方便。

3.AddressBook詳述

* 在AddressBook中,比較常用的類是ABAddressBook, ABPerson, ABGroup, ABRecord

* ABAddressBook :封裝了通訊錄的介面。(對應ABAddressBookRef)

* ABPerson           :封裝通訊錄個人的資訊資料。(對應ABPersonRef)

* ABGroup             :封裝了通訊錄組資訊資料。(對應ABGroupRef)

* ABRecord            :封裝了資料庫的一條記錄。(對應ABRecordRef)

 想要擷取通訊錄的資訊,第一步是要匯入AddressBook的架構,並在標頭檔中寫入標頭檔<AddressBook/AddressBook.h>

 使用者想要訪問通訊錄,第一步要建立通訊錄對象,用於使用者請求訪問通訊錄,代碼如下:

1 ABAddressBookRef addressbook = ABAddressBookCreateWithOptions(NULL, NULL);

 * 如果是第一次訪問通訊錄,需要擷取使用者的授權,不是第一次,直接存取。系統給我們提供的函數是:

 *  ABAddressBookRequestAccessWithCompletion(<#ABAddressBookRef addressBook#>, <#^(bool granted, CFErrorRef error)completion#>)

 * 如果第一次訪問,點擊允許訪問,granted的值為一。

 * 只要granted的值為真的情況下,才允許訪問通訊錄。

 * 擷取通訊錄的所有記錄的代碼如下:

1 NSArray *array = (NSArray *)ABAddressBookCopyArrayOfAllPeople(addressbook);

 * 接下來我們要擷取通訊錄的連絡人的姓名:代碼如下:

1 ABRecordRef record = array[i];2 NSString *name = (NSString *)ABRecordCopyCompositeName(record);

 * 擷取連絡人的手機號的時候,是屬於一個多值屬性,跟後去連絡人姓名的時候有點不同,連絡人姓名屬於單值屬性,代碼如下:

1 ABMultiValueRef ref = ABRecordCopyValue(record, kABPersonPhoneProperty);2 NSString *phone = ABMultiValueCopyValueAtIndex(ref, 0);

 * 整體代碼為:(第二個函數的功能是去掉電話號碼中的特殊字元,因為我們擷取到得號碼是蘋果給我們分隔好的)

-(void)getAddressbookContent{    ABAddressBookRef addressbook = ABAddressBookCreateWithOptions(NULL, NULL);    ABAddressBookRequestAccessWithCompletion(addressbook, ^(bool granted, CFErrorRef error) {        if (granted == YES)        {            NSArray *array = (NSArray *)ABAddressBookCopyArrayOfAllPeople(addressbook);            for (int i = 0; i < array.count; i ++)            {                ABRecordRef record = array[i];                NSString *name = (NSString *)ABRecordCopyCompositeName(record);                ABMultiValueRef ref = ABRecordCopyValue(record, kABPersonPhoneProperty);                NSString *phone = ABMultiValueCopyValueAtIndex(ref, 0);                NSString *phone1 = phone;                phone1 = [self deleteSpecialString:phone1];                contact *c = [[contact alloc]initWithName:name withPhone:phone1];                [_arrayContact addObject:c];                [c release];                CFRelease(name);                CFRelease(phone);                CFRelease(ref);            }        }    });}-(NSString *)deleteSpecialString:(NSString *)string{    string = [string stringByReplacingOccurrencesOfString:@"(" withString:@""];    string = [string stringByReplacingOccurrencesOfString:@")" withString:@""];    string = [string stringByReplacingOccurrencesOfString:@"-" withString:@""];    string = [string stringByReplacingOccurrencesOfString:@" " withString:@""];    return string;}
 4.ABAddressBookUI簡述

  * 使用這個類我們可以直接調出通訊錄的介面,代碼如下:

ABPeoplePickerNavigationController *picker = [[ABPeoplePickerNavigationController alloc] init];[self presentViewController:picker animated:YES completion:nil];

 如下:這個類有幾個比較常用的代理方法,分別是:

點擊取消按鈕,相應該方法

- (void)peoplePickerNavigationControllerDidCancel:(ABPeoplePickerNavigationController *)peoplePicker

點擊連絡人資訊,是否跳轉到詳情介面

- (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person

在連絡人詳情介面中點擊了其它資訊,是否跳轉到其它介面(例如,點擊時間,可以開啟日曆)

- (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person property:(ABPropertyID)property identifier:(ABMultiValueIdentifier)identifier

 

5.上面的介紹,只是通訊錄的基本使用,當然通訊錄的方法不止這些,例如可以修改,添加,刪除連絡人的資訊,在此主要介紹了如何擷取通訊錄的資訊。

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.