IOS如何访问通讯录
来源:互联网 发布:软件测试程序 编辑:程序博客网 时间:2024/05/15 12:12
引言:最近一个项目要求app能读取手机的通讯录。
其实我是反对这类的需求,你说你读我的隐私,我肯定不愿意的。幸好ios6.0 以后给了个权限控制。当打开app的时候你可以选择拒绝。
实现方法:
//读取所有联系人-(void)ReadAllPeoples{ //取得本地通信录名柄 ABAddressBookRef tmpAddressBook = nil; if ([[UIDevice currentDevice].systemVersion floatValue]>=6.0) { tmpAddressBook=ABAddressBookCreateWithOptions(NULL, NULL); dispatch_semaphore_t sema=dispatch_semaphore_create(0); ABAddressBookRequestAccessWithCompletion(tmpAddressBook, ^(bool greanted, CFErrorRef error){ dispatch_semaphore_signal(sema); }); dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER); dispatch_release(sema); } else { tmpAddressBook =ABAddressBookCreate(); } //取得本地所有联系人记录 if (tmpAddressBook==nil) { return ; }; NSArray* tmpPeoples = (NSArray*)ABAddressBookCopyArrayOfAllPeople(tmpAddressBook); for(id tmpPerson in tmpPeoples) { //获取的联系人单一属性:First name NSString* tmpFirstName = (NSString*)ABRecordCopyValue(tmpPerson, kABPersonFirstNameProperty); NSLog(@"First name:%@", tmpFirstName); [tmpFirstName release]; //获取的联系人单一属性:Last name NSString* tmpLastName = (NSString*)ABRecordCopyValue(tmpPerson, kABPersonLastNameProperty); NSLog(@"Last name:%@", tmpLastName); [tmpLastName release]; //获取的联系人单一属性:Nickname NSString* tmpNickname = (NSString*)ABRecordCopyValue(tmpPerson, kABPersonNicknameProperty); NSLog(@"Nickname:%@", tmpNickname); [tmpNickname release]; //获取的联系人单一属性:Company name NSString* tmpCompanyname = (NSString*)ABRecordCopyValue(tmpPerson, kABPersonOrganizationProperty); NSLog(@"Company name:%@", tmpCompanyname); [tmpCompanyname release]; //获取的联系人单一属性:Job Title NSString* tmpJobTitle= (NSString*)ABRecordCopyValue(tmpPerson, kABPersonJobTitleProperty); NSLog(@"Job Title:%@", tmpJobTitle); [tmpJobTitle release]; //获取的联系人单一属性:Department name NSString* tmpDepartmentName = (NSString*)ABRecordCopyValue(tmpPerson, kABPersonDepartmentProperty); NSLog(@"Department name:%@", tmpDepartmentName); [tmpDepartmentName release]; //获取的联系人单一属性:Email(s) ABMultiValueRef tmpEmails = ABRecordCopyValue(tmpPerson, kABPersonEmailProperty); for(NSInteger j = 0; ABMultiValueGetCount(tmpEmails); j++) { NSString* tmpEmailIndex = (NSString*)ABMultiValueCopyValueAtIndex(tmpEmails, j); NSLog(@"Emails%d:%@", j, tmpEmailIndex); [tmpEmailIndex release]; } CFRelease(tmpEmails); //获取的联系人单一属性:Birthday NSDate* tmpBirthday = (NSDate*)ABRecordCopyValue(tmpPerson, kABPersonBirthdayProperty); NSLog(@"Birthday:%@", tmpBirthday); [tmpBirthday release]; //获取的联系人单一属性:Note NSString* tmpNote = (NSString*)ABRecordCopyValue(tmpPerson, kABPersonNoteProperty); NSLog(@"Note:%@", tmpNote); [tmpNote release]; //获取的联系人单一属性:Generic phone number ABMultiValueRef tmpPhones = ABRecordCopyValue(tmpPerson, kABPersonPhoneProperty); for(NSInteger j = 0; j < ABMultiValueGetCount(tmpPhones); j++) { NSString* tmpPhoneIndex = (NSString*)ABMultiValueCopyValueAtIndex(tmpPhones, j); NSLog(@"tmpPhoneIndex%d:%@", j, tmpPhoneIndex); [tmpPhoneIndex release]; } CFRelease(tmpPhones); } //释放内存 [tmpPeoples release]; CFRelease(tmpAddressBook); }
解释下代码:由于ios6.0系统的升级,对客户隐私有了一个较大的提示。
以前
tmpAddressBook =ABAddressBookCreate();这样就可以读取了,但是现在要做一个判断了。可以具体看看代码。
把通讯录取出来放在一个array里面。这样你就可以对数组进行你的要求了。
备注:
苹果中文语言貌似有点问题。ios6.0 会提示你的app访问日历。。。。
然后网上查了下资料。可以参照微信访问通讯录的形式,给客户一个提示
他是在plist中 添加一项在XCode里显示的是Privacy - Contacts Usage Description。后面的string就是你要想提示的文字内容
“Privacy - Location Usage Description”。这个是定位位置提示。其他类似。
备注二:
分享一个测试经验,也是从网上看到的。
一把苹果的app访问位置或者通讯录,第一次都会有一个提示让你选择。
但是第二次及以后,即时删掉,也不会再出现了。
如果想再次出现,可以 设置-通用-还原-还原位置与隐私
这样你再次点击你的app就会再次出现了。
0 0
- IOS如何访问通讯录
- IOS如何访问通讯录
- [转]IOS如何访问通讯录
- IOS开发笔记 IOS如何访问通讯录
- iOS开发之-----iOS如何访问通讯录
- iOS开发之如何访问通讯录
- IOS开发笔记(12)IOS如何访问通讯录
- IOS开发笔记(12)IOS如何访问通讯录
- iOS 访问通讯录
- IOS---访问通讯录
- iOS 访问通讯录
- iOS 访问通讯录
- iOS -- 访问通讯录
- ios 访问通讯录
- IOS访问通讯录
- iOS 访问通讯录
- iOS访问通讯录
- ios 通讯录访问权限
- c++实现类似Common Lisp的多参数加法和比较
- LeetCode Permutations II
- Activity中Handler的使用
- linux下java调用matlab方案
- 身处建筑设计行业,感觉设计团队的协作方式还很原始,打算自我创业提供解决方案。
- IOS如何访问通讯录
- 拷贝构造函数
- socket设置为非阻塞方式(windows和linux)
- SharePoint 2013跨网站集发布功能简介
- Effective C++笔记:实现
- POJ 1080 Human Gene Functions LCS变形题
- iOS技巧之获取本机通讯录中的内容,解析通讯录源代码
- 第十四周--多态性、虚函数和抽象类(5)
- Android应用程序apk内xml文件编码解析