2012年12月10日月曜日

アドレスブック(連絡先)からの情報取得

アドレスブック(連絡先)へアクセスするには以下の様にします。


// アドレスブックを生成
ABAddressBookRef book = ABAddressBookCreateWithOptions(NULL, nil);
// アドレスブックのレコード配列を取得
CFArrayRef records = ABAddressBookCopyArrayOfAllPeople(book);

// 配列の要素の数だけ繰り返す
for (int i = 0 ; i < CFArrayGetCount(records) ; i++) {
    // 1レコード取得
    ABRecordRef record = CFArrayGetValueAtIndex(records, i);
    // 名を取得
    NSString *firstName = (NSString*)ABRecordCopyValue(record, kABPersonFirstNameProperty);
    if (firstName == nil) {
        firstName = @""; // 無ければ空文字に
    }
    // 氏を取得
    NSString *lastName = (NSString*)ABRecordCopyValue(record, kABPersonLastNameProperty);
    if (lastName == nil) {
        lastName = @""; // 無ければ空文字に
    }
    // 氏名を生成
    NSString *name = [NSString stringWithFormat:@"%@ %@", lastName, firstName];
    NSLog(@"%@", name);
    if (firstName != nil) {
        CFRelease(firstName);
    }
    if (lastName != nil) {
        CFRelease(lastName);
    }
    // レコードから電話番号の取得
    ABMultiValueRef tels = ABRecordCopyValue(record, kABPersonPhoneProperty);
    if (ABMultiValueGetCount(tels)) {
        NSString *tel = (NSString*)ABMultiValueCopyValueAtIndex(tels, 0);
        NSLog(@"%@", tel);
        CFRelease(tel);
    }
}
CFRelease(book);
CFRelease(records);


「ABRecordCopyValue」のパラメータで指定するkABPersonFirstNameProperty等で連絡先から何を取得するかを指定します。
その他プロパティには以下のものがあります。

kABPersonFirstNameファーストネーム
kABPersonLastNameラストネーム
kABPersonMiddleNameミドルネーム
kABPersonPrefixPropertyプレフィックス
kABPersonSuffixPropertyサフィックス
kABPersonNicknamePropertyニックネーム
kABPersonFirstNamePhoneticPropertyファーストネームの読み
kABPersonLastNamePhoneticPropertyラストネームの読み
kABPersonMiddleNamePhoneticPropertyミドルネームの読み
kABPersonOrganizationProperty組織
kABPersonJobTitleProperty役職
kABPersonDepartmentProperty部門
kABPersonDepartmentPropertyEメール
kABPersonBirthdayProperty誕生日
kABPersonNotePropertyメモ
kABPersonCreationDateProperty作成日
kABPersonModificationDateProperty更新日
kABPersonAddressProperty住所
kABPersonDateProperty日付
kABPersonKindProperty種別
kABPersonPhoneProperty電話番号
kABPersonInstantMessagePropertyインスタントメッセージ
kABPersonURLPropertyURL
kABPersonRelatedNamesProperty関係

また、アドレスブックから取得した各種情報はCFReleaseで解放する必要があります。(ARCを使用していない場合)