IOS 通訊錄的訪問和修改的實(shí)現(xiàn)
IOS 通訊錄的訪問和修改的實(shí)現(xiàn)
在iOS端可以通過AddressBook或者AddressBookUI兩個(gè)框架實(shí)現(xiàn),區(qū)別是第二個(gè)框架帶視圖,一般使用第一個(gè)框架就夠了。
下面介紹AddressBook框架的使用,注意這個(gè)是C語言框架,使用起來比較麻煩。
①請(qǐng)求授權(quán)
先判斷授權(quán)狀態(tài),如果未授權(quán)則進(jìn)行授權(quán)。
// 1.主動(dòng)請(qǐng)求授權(quán),先判斷授權(quán)狀態(tài)
NSInteger state = ABAddressBookGetAuthorizationStatus();
if (state == kABAuthorizationStatusAuthorized) {
NSLog(@"已經(jīng)授權(quán)");
}else{
ABAddressBookRef book = ABAddressBookCreateWithOptions(NULL, NULL);
ABAddressBookRequestAccessWithCompletion(book, ^(bool granted, CFErrorRef error) {
if (granted) {
NSLog(@"授權(quán)成功");
}else{
NSLog(@"授權(quán)失敗");
}
});
}
②獲取通訊錄的聯(lián)系人
c語言沒有對(duì)象,通過一些以Ref結(jié)尾的指針來獲取數(shù)據(jù)。
注意C語言數(shù)組的規(guī)模通過函數(shù)獲取,拿到元素也要通過函數(shù)。
注意一些枚舉值以k開頭。
注意電話是一個(gè)數(shù)組。
// 先判斷授權(quán)狀態(tài)
if (ABAddressBookGetAuthorizationStatus() != kABAuthorizationStatusAuthorized) {
NSLog(@"未授權(quán)");
return;
}
ABAddressBookRef book = ABAddressBookCreateWithOptions(NULL, NULL);
CFArrayRef persons = ABAddressBookCopyArrayOfAllPeople(book);
CFIndex count = CFArrayGetCount(persons);
for (NSInteger i = 0; i < count; i++) {
ABRecordRef person = CFArrayGetValueAtIndex(persons, i);
CFStringRef lastName = ABRecordCopyValue(person, kABPersonLastNameProperty);
CFStringRef firstName = ABRecordCopyValue(person, kABPersonFirstNameProperty);
ABMutableMultiValueRef phones = ABRecordCopyValue(person, kABPersonPhoneProperty);
NSLog(@"聯(lián)系人:%@ %@",lastName,firstName);
NSInteger cnt = ABMultiValueGetCount(phones);
for (int j = 0; j < cnt; j++) {
CFStringRef phone = ABMultiValueCopyValueAtIndex(phones, j);
NSLog(@"電話:%@ ",phone);
}
}
③修改通訊錄聯(lián)系人
首先拿到通訊錄中的人,然后調(diào)用SetValue方法來修改值。
最后不要忘記保存。
// 先判斷授權(quán)狀態(tài)
if (ABAddressBookGetAuthorizationStatus() != kABAuthorizationStatusAuthorized) {
NSLog(@"未授權(quán)");
return;
}
ABAddressBookRef book = ABAddressBookCreateWithOptions(NULL, NULL);
CFArrayRef persons = ABAddressBookCopyArrayOfAllPeople(book);
ABRecordRef person = CFArrayGetValueAtIndex(persons, 0);
ABRecordSetValue(person, kABPersonLastNameProperty, @"changed", NULL);
ABAddressBookSave(book, NULL);
④添加一個(gè)聯(lián)系人
注意添加電話時(shí)應(yīng)創(chuàng)建MultiValue。
// 先判斷授權(quán)狀態(tài)
if (ABAddressBookGetAuthorizationStatus() != kABAuthorizationStatusAuthorized) {
NSLog(@"未授權(quán)");
return;
}
ABAddressBookRef book = ABAddressBookCreateWithOptions(NULL, NULL);
CFArrayRef persons = ABAddressBookCopyArrayOfAllPeople(book);
CFIndex count = CFArrayGetCount(persons);
for (NSInteger i = 0; i < count; i++) {
ABRecordRef person = CFArrayGetValueAtIndex(persons, i);
CFStringRef lastName = ABRecordCopyValue(person, kABPersonLastNameProperty);
CFStringRef firstName = ABRecordCopyValue(person, kABPersonFirstNameProperty);
ABMutableMultiValueRef phones = ABRecordCopyValue(person, kABPersonPhoneProperty);
NSLog(@"聯(lián)系人:%@ %@",lastName,firstName);
NSInteger cnt = ABMultiValueGetCount(phones);
for (int j = 0; j < cnt; j++) {
CFStringRef phone = ABMultiValueCopyValueAtIndex(phones, j);
NSLog(@"電話:%@ ",phone);
}
}
感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!
相關(guān)文章
IOS實(shí)現(xiàn)微信朋友圈相冊(cè)評(píng)論界面的翻轉(zhuǎn)過渡動(dòng)畫
現(xiàn)在很多人幾乎每天都離不開微信,大家有沒有發(fā)現(xiàn)在點(diǎn)開微信相冊(cè)的時(shí)候,想要在相冊(cè)圖片界面跳轉(zhuǎn)查看點(diǎn)贊和評(píng)論時(shí),微信會(huì)采用界面翻轉(zhuǎn)的過渡動(dòng)畫來跳轉(zhuǎn)到評(píng)論界面,點(diǎn)擊完成又會(huì)翻轉(zhuǎn)回到圖片界面,這不同于一般的導(dǎo)航界面滑動(dòng)動(dòng)畫,于是學(xué)著做了一下,有需要一起看看。2016-08-08
iOS 11 UINavigationItem 去除左右間隙的方法
本篇文章主要介紹了iOS 11 UINavigationItem 去除左右間隙的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-10-10
iOS 委托與文本輸入(內(nèi)容根據(jù)iOS編程編寫)
這篇文章主要介紹了iOS 委托與文本輸入(內(nèi)容根據(jù)iOS編程編寫) 的相關(guān)資料,需要的朋友可以參考下2016-09-09
詳解適配iOS10 的相關(guān)權(quán)限設(shè)置
在最新版本的iOS10系統(tǒng)中,如果你的項(xiàng)目中訪問了隱私數(shù)據(jù),比如:相機(jī)、相冊(cè)、錄音、定位、聯(lián)系人等等。涉及到權(quán)限問題,本篇文章主要介紹了適配iOS10 的相關(guān)權(quán)限設(shè)置,有興趣的可以了解一下。2016-12-12
iOS開發(fā)-自定義相機(jī)實(shí)例(仿微信)
這篇文章主要介紹了iOS開發(fā)-自定義相機(jī)實(shí)例(仿微信),實(shí)例分析了ios 自定義相機(jī)的技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下。2017-03-03

