zoukankan      html  css  js  c++  java
  • IOS开发笔记 IOS如何访问通讯录

        IOS开发笔记  IOS如何访问通讯录

    其实我是反对这类的需求,你说你读我的隐私,我肯定不愿意的。
    幸好ios6.0 以后给了个权限控制。当打开app的时候你可以选择拒绝。


    实现方法:

    [plain] view plaincopy
    1. //读取所有联系人  
    2.   
    3. -(void)ReadAllPeoples  
    4.   
    5. {  
    6.       
    7.     //取得本地通信录名柄  
    8.       
    9.     ABAddressBookRef tmpAddressBook = nil;  
    10.       
    11.     if ([[UIDevice currentDevice].systemVersion floatValue]>=6.0) {  
    12.         tmpAddressBook=ABAddressBookCreateWithOptions(NULL, NULL);  
    13.         dispatch_semaphore_t sema=dispatch_semaphore_create(0);  
    14.         ABAddressBookRequestAccessWithCompletion(tmpAddressBook, ^(bool greanted, CFErrorRef error){  
    15.             dispatch_semaphore_signal(sema);  
    16.         });  
    17.       
    18.     dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER);  
    19.     dispatch_release(sema);  
    20.     }  
    21.     else  
    22.     {  
    23.         tmpAddressBook =ABAddressBookCreate();  
    24.     }  
    25.     //取得本地所有联系人记录  
    26.       
    27.       
    28.     if (tmpAddressBook==nil) {  
    29.         return ;  
    30.     };  
    31.     NSArray* tmpPeoples = (NSArray*)ABAddressBookCopyArrayOfAllPeople(tmpAddressBook);  
    32.       
    33.     for(id tmpPerson in tmpPeoples)  
    34.           
    35.     {  
    36.           
    37.         //获取的联系人单一属性:First name  
    38.           
    39.         NSString* tmpFirstName = (NSString*)ABRecordCopyValue(tmpPerson, kABPersonFirstNameProperty);  
    40.           
    41.         NSLog(@"First name:%@", tmpFirstName);  
    42.           
    43.         [tmpFirstName release];  
    44.           
    45.         //获取的联系人单一属性:Last name  
    46.           
    47.         NSString* tmpLastName = (NSString*)ABRecordCopyValue(tmpPerson, kABPersonLastNameProperty);  
    48.           
    49.         NSLog(@"Last name:%@", tmpLastName);  
    50.           
    51.         [tmpLastName release];  
    52.           
    53.         //获取的联系人单一属性:Nickname  
    54.           
    55.         NSString* tmpNickname = (NSString*)ABRecordCopyValue(tmpPerson, kABPersonNicknameProperty);  
    56.           
    57.         NSLog(@"Nickname:%@", tmpNickname);  
    58.           
    59.         [tmpNickname release];  
    60.           
    61.         //获取的联系人单一属性:Company name  
    62.           
    63.         NSString* tmpCompanyname = (NSString*)ABRecordCopyValue(tmpPerson, kABPersonOrganizationProperty);  
    64.           
    65.         NSLog(@"Company name:%@", tmpCompanyname);  
    66.           
    67.         [tmpCompanyname release];  
    68.           
    69.         //获取的联系人单一属性:Job Title  
    70.           
    71.         NSString* tmpJobTitle= (NSString*)ABRecordCopyValue(tmpPerson, kABPersonJobTitleProperty);  
    72.           
    73.         NSLog(@"Job Title:%@", tmpJobTitle);  
    74.           
    75.         [tmpJobTitle release];  
    76.           
    77.         //获取的联系人单一属性:Department name  
    78.           
    79.         NSString* tmpDepartmentName = (NSString*)ABRecordCopyValue(tmpPerson, kABPersonDepartmentProperty);  
    80.           
    81.         NSLog(@"Department name:%@", tmpDepartmentName);  
    82.           
    83.         [tmpDepartmentName release];  
    84.           
    85.         //获取的联系人单一属性:Email(s)  
    86.           
    87.         ABMultiValueRef tmpEmails = ABRecordCopyValue(tmpPerson, kABPersonEmailProperty);  
    88.           
    89.         for(NSInteger j = 0; ABMultiValueGetCount(tmpEmails); j++)  
    90.               
    91.         {  
    92.               
    93.             NSString* tmpEmailIndex = (NSString*)ABMultiValueCopyValueAtIndex(tmpEmails, j);  
    94.               
    95.             NSLog(@"Emails%d:%@", j, tmpEmailIndex);  
    96.               
    97.             [tmpEmailIndex release];  
    98.               
    99.         }  
    100.           
    101.         CFRelease(tmpEmails);  
    102.           
    103.         //获取的联系人单一属性:Birthday  
    104.           
    105.         NSDate* tmpBirthday = (NSDate*)ABRecordCopyValue(tmpPerson, kABPersonBirthdayProperty);  
    106.           
    107.         NSLog(@"Birthday:%@", tmpBirthday);  
    108.           
    109.         [tmpBirthday release];  
    110.           
    111.         //获取的联系人单一属性:Note  
    112.           
    113.         NSString* tmpNote = (NSString*)ABRecordCopyValue(tmpPerson, kABPersonNoteProperty);  
    114.           
    115.         NSLog(@"Note:%@", tmpNote);  
    116.           
    117.         [tmpNote release];  
    118.           
    119.         //获取的联系人单一属性:Generic phone number  
    120.           
    121.         ABMultiValueRef tmpPhones = ABRecordCopyValue(tmpPerson, kABPersonPhoneProperty);  
    122.           
    123.         for(NSInteger j = 0; j < ABMultiValueGetCount(tmpPhones); j++)  
    124.               
    125.         {  
    126.               
    127.             NSString* tmpPhoneIndex = (NSString*)ABMultiValueCopyValueAtIndex(tmpPhones, j);  
    128.               
    129.             NSLog(@"tmpPhoneIndex%d:%@", j, tmpPhoneIndex);  
    130.               
    131.             [tmpPhoneIndex release];  
    132.               
    133.         }  
    134.           
    135.         CFRelease(tmpPhones);  
    136.           
    137.     }  
    138.       
    139.     //释放内存   
    140.       
    141.     [tmpPeoples release];  
    142.       
    143.     CFRelease(tmpAddressBook);  
    144.       
    145. }  

    解释下代码:由于ios6.0系统的升级,对客户隐私有了一个较大的提示。
    以前
    [plain] view plaincopy
    1. tmpAddressBook =ABAddressBookCreate();这样就可以读取了,但是现在要做一个判断了。可以具体看看代码。  
    [plain] view plaincopy
    1. 把通讯录取出来放在一个array里面。这样你就可以对数组进行你的要求了。  
    [plain] view plaincopy
    1.   

    备注:

    苹果中文语言貌似有点问题。ios6.0  会提示你的app访问日历。。。。
    然后网上查了下资料。可以参照微信访问通讯录的形式,给客户一个提示
    他是在plist中  添加一项在XCode里显示的是Privacy - Contacts Usage Description。后面的string就是你要想提示的文字内容
    Privacy - Location Usage Description”。这个是定位位置提示。其他类似。

    备注二:

    分享一个测试经验,也是从网上看到的。
    一把苹果的app访问位置或者通讯录,第一次都会有一个提示让你选择。
    但是第二次及以后,即时删掉,也不会再出现了。
    如果想再次出现,可以  设置-通用-还原-还原位置与隐私
    这样你再次点击你的app就会再次出现了。


  • 相关阅读:
    CF954I Yet Another String Matching Problem ( FFT )
    P4173 残缺的字符串 (带通配符的FFT字符匹配)
    电灯泡(简单容斥)
    HDU 6143 Killer Names (容斥)
    bzoj 3597: [Scoi2014]方伯伯运椰子[分数规划]
    【COGS2652】秘术「天文密葬法」(长链剖分,分数规划)
    Longge's problem ( gcd的积性)
    Desert King POJ
    P3628 [APIO2010]特别行动队(斜率dp)
    树状数组
  • 原文地址:https://www.cnblogs.com/new0801/p/6175845.html
Copyright © 2011-2022 走看看