zoukankan      html  css  js  c++  java
  • ios 读取通讯录

    1.获取通讯录列表

    +(NSMutableDictionary*)getAddressPeopleArray
    {
        BOOL granted = [AddressEngine getAccessGranted];
    //    NSMutableArray*addArray=[NSMutableArray arrayWithCapacity:0];
        NSMutableDictionary * addrDic = [NSMutableDictionary dictionaryWithCapacity:0];
        if (granted)
        {
            ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, NULL);
            ABAddressBookRequestAccessWithCompletion(addressBook, ^(bool granted, CFErrorRef error) {
            });
            NSArray *array = (__bridge NSArray *)ABAddressBookCopyArrayOfAllPeople(addressBook);
            // NSLog(@"kaishi");
            for (int i = 0; i<array.count;i++)
            {
                ABRecordRef person = (__bridge ABRecordRef)([array objectAtIndex:i]);
                ABMutableMultiValueRef ref = ABRecordCopyValue(person, kABPersonPhoneProperty);//读取电话 格式111-2222-2222
                addressPeople * people=[[addressPeople alloc]init];
                NSInteger nCount = ABMultiValueGetCount(ref);//单个人电话数量
                if ( nCount>5 || nCount<1 )
                {
                    continue;
                }
                
                addressPeoKey*aKey=[[addressPeoKey alloc]init];
                aKey.count=nCount;
                aKey.phoneSet=[NSMutableSet setWithCapacity:0];
                
                people.phnum=[NSMutableArray arrayWithCapacity:0];
                
                for(int i = 0 ;i < nCount;i++)
                {
                    NSString *phoneNO=[AddressEngine trimIlegalChar:[self trimIlegalChar:(__bridge NSString *)(ABMultiValueCopyValueAtIndex(ref, i))]];
                    if (phoneNO!=nil&&![phoneNO isEqualToString:@""])
                    {
                        if ([phoneNO hasPrefix:@"+86"])
                        {
                            phoneNO=[phoneNO substringFromIndex:3];
                        }
                        [people.phnum addObject:phoneNO];
                        
                        [aKey.phoneSet addObject:phoneNO];
                    }
                }
                people.name=(__bridge NSString *)ABRecordCopyCompositeName(person);//名字
                if (people.name==nil)
                {
                    people.name=@"姓名不详";
                }
                if (people.name.length>0)
                {
                    NSString *firstChar = [people.name substringToIndex:1];
                    const char * cString = [firstChar UTF8String];
                    if (cString!=NULL)
                    {
                        if (strlen(cString) == 3)
                        {
                            // 名字是汉字开头
                            NSMutableString *ms = [[NSMutableString alloc] initWithString:people.name];
                            CFStringTransform((__bridge CFMutableStringRef)ms, 0, kCFStringTransformToLatin, NO);
                            //                    CFStringTransform((__bridge CFMutableStringRef)ms, 0, kCFStringTransformStripDiacritics, NO);
                            people.pinyinName=[NSString stringWithString:ms];
                            people.pinyinName=[AddressEngine trimIlegalChar:people.pinyinName];
                            //                    NSLog(@"pinyin:%@",people.pinyinName);
                        }else
                        {
                            people.pinyinName=[people.name lowercaseString];
                        }
                    }else
                    {
                        people.name=[people.phnum objectAtIndex:0];
                        people.pinyinName=@"#FX";
                    }
                }else
                {
                    people.name=[people.phnum objectAtIndex:0];
                    people.pinyinName=@"";
                }
                NSInteger rec=ABRecordGetRecordID(person);
                people.recordID=[NSString stringWithFormat:@"%ld",rec];
                            
                people.remark=(__bridge NSString *)(ABRecordCopyValue(person, kABPersonNoteProperty));//备注
                if (!people.remark)
                {
                    people.remark=@"";
                }
                if (people.remark.length>0)
                {
                    NSString*re=people.remark;
                    people.remark=[AddressEngine cleanQuotesWithStr:re];
                }
                people.isChoose=NO;
                people.isMark=NO;
                
                [addrDic setObject:people forKey:aKey];
    //            [addArray addObject:people];
            }
            //        NSLog(@"jieshu");
        }
        else
        {
            UIAlertView*alert=[[UIAlertView alloc]initWithTitle:@"权限受限"
                                                     message:@"设置-手机梵讯-启用通讯录权限"
                                                    delegate:nil
                                           cancelButtonTitle:@"确定"
                                           otherButtonTitles:nil];
            [alert show];
        }
    //    return addArray;
        return addrDic;
    }

    2.判断是否有权限

    +(BOOL)getAccessGranted
    {
        ABAddressBookRef addressBook = NULL;
        __block BOOL accessGranted = NO;
        
        if (&ABAddressBookRequestAccessWithCompletion != NULL)
        {
            addressBook = ABAddressBookCreateWithOptions(NULL, NULL);
            dispatch_semaphore_t sema = dispatch_semaphore_create(0);
            ABAddressBookRequestAccessWithCompletion(addressBook, ^(bool granted, CFErrorRef error)
                                                     {
                                                         accessGranted = granted;
                                                         dispatch_semaphore_signal(sema);
                                                     });
            dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER);
        }
        else
        {
            accessGranted = YES;
        }
        return accessGranted;
    }
  • 相关阅读:
    数据库读现象 数据库锁
    Mysql索引
    视图 触发器 内置函数 流程控制 事务 存储过程
    pymysql模块
    表相关操作
    初识数据库
    python 进程
    python常见错误和异常
    python课程设计--学生管理系统
    python-类的多态的理解
  • 原文地址:https://www.cnblogs.com/liaods/p/4932140.html
Copyright © 2011-2022 走看看