zoukankan      html  css  js  c++  java
  • 通讯录(ios自带无界面)

    1,添加框架AddressBook.framework

    2,请求权限认证,在Appdelegate.m文件中

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

            /*

             kABAuthorizationStatusNotDetermined = 0, 没有决定是否授权

             kABAuthorizationStatusRestricted,  受限制

             kABAuthorizationStatusDenied,  拒绝

             kABAuthorizationStatusAuthorized  授权

             */

            //请求用户授权

            if(ABAddressBookGetAuthorizationStatus()==kABAuthorizationStatusNotDetermined)

            {

                ABAddressBookRef book=ABAddressBookCreateWithOptions(NULL, NULL);

                ABAddressBookRequestAccessWithCompletion(book, ^(bool granted, CFErrorRef error) {

                    if (granted) {

                        NSLog(@"授权成功");

                    }

                    else

                    {

                        NSLog(@"授权失败,%@",error);

                    }

                });

                

            }

     

           return YES;

    }

     

    3,控制器中实现

     

    #import "ViewController.h"

    #import <AddressBook/AddressBook.h>

     

    @interface ViewController ()

     

    @end

     

    @implementation ViewController

     

    - (void)viewDidLoad {

        [super viewDidLoad];

    //    /*

    //     kABAuthorizationStatusNotDetermined = 0, 没有决定是否授权

    //     kABAuthorizationStatusRestricted,  受限制

    //     kABAuthorizationStatusDenied,  拒绝

    //     kABAuthorizationStatusAuthorized  授权

    //     */

    //    //请求用户授权

    //    if(ABAddressBookGetAuthorizationStatus()==kABAuthorizationStatusNotDetermined)

    //    {

    //        ABAddressBookRef book=ABAddressBookCreateWithOptions(NULL, NULL);

    //        ABAddressBookRequestAccessWithCompletion(book, ^(bool granted, CFErrorRef error) {

    //            if (granted) {

    //                NSLog(@"授权成功");

    //            }

    //            else

    //            {

    //                NSLog(@"授权失败,%@",error);

    //            }

    //        });

    //        

    //    }

     

    }

    //获取数据

    -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event

    {

        //1.创建通讯录

        ABAddressBookRef book=ABAddressBookCreateWithOptions(NULL, NULL);

        //获取所有联系人记录

        CFArrayRef multivalues=ABAddressBookCopyArrayOfAllPeople(book);

        CFIndex count=CFArrayGetCount(multivalues);

        for (CFIndex i=0; i<count; ++i) {

            ABRecordRef record=CFArrayGetValueAtIndex(multivalues, i);

            CFStringRef first=ABRecordCopyValue(record, kABPersonFirstNameProperty);

            CFStringRef last=ABRecordCopyValue(record, kABPersonLastNameProperty);

            NSLog(@"%@,%@",(__bridge_transfer NSString*)first,(__bridge_transfer NSString*)last);

            ABMultiValueRef multiPhones=ABRecordCopyValue(record, kABPersonPhoneProperty);

            

            CFIndex countPhone=ABMultiValueGetCount(multiPhones);

            for (int j=0; j<countPhone; j++) {

                CFStringRef phone=ABMultiValueCopyValueAtIndex(multiPhones, j);

                NSLog(@"phone=%@",(__bridge_transfer NSString*)phone);

            }

            CFRelease(multiPhones);

        }

        CFRelease(multivalues);

        CFRelease(book);

        

    }

     

     

     

     

    - (void)didReceiveMemoryWarning {

        [super didReceiveMemoryWarning];

        // Dispose of any resources that can be recreated.

    }

     

    @end

  • 相关阅读:
    ArcGIS.Server.9.3.DotNet的ADF与ASP.NET AJAX
    ArcGIS.Server.9.3和ArcGIS API for JavaScript保存自定义图形(十)
    android开发我的新浪微博客户端载入页面UI篇(1.1)
    ArcGIS.Server.9.3和ArcGIS API for JavaScript实现距离量算和面积量算(九)
    ArcGIS.Server.9.3和ArcGIS API for JavaScript实现点、线、面的buffer分析(十一)
    android开发我的新浪微博客户端载入页面sqlite篇(1.2)
    市净率PB
    转 未来的GDI:WPF技术纵览
    转 LUA语言学习教程
    sl下的两种跨线程访问方式
  • 原文地址:https://www.cnblogs.com/tangranyang/p/4656144.html
Copyright © 2011-2022 走看看