iOS开发检测通讯录权限并申请开启
浏览:460次 出处信息
在iOS 6中,以前工作正常的访问通讯录的iPhone程序可能会出错,现象是程序启动时不提醒用户是否允许程序访问通讯录,同时在“设置->隐私->通讯录”中看不到你的程序。另外,对通讯录进行操作的代码会报类似于以下消息的错误:
Could not compile statement for query (ABCCopyArrayOfAllInstancesOfClassInSourceMatchingProperties): SELECT ROWID, Name, ExternalIdentifier, Type, ConstraintsPath, ExternalModificationTag, ExternalSyncTag, AccountID, Enabled, SyncData, MeIdentifier, Capabilities FROM ABStore WHERE Enabled = ?;
其原因是iOS 6加强了通讯录访问控制,要求开发人员显式声明需要访问通讯录,方法是调用 ABAddressBookRequestAccessWithCompletion方法,具体参见官方文档:
http://developer.apple.com/library/ios/#releasenotes/General/RN-iOSSDK-6_0/index.html
我自已写了一个过程CheckAddressBookAuthorization放在helper里
+(void)CheckAddressBookAuthorization:(void (^)(bool isAuthorized))block { ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, NULL); ABAuthorizationStatus authStatus = ABAddressBookGetAuthorizationStatus(); if (authStatus != kABAuthorizationStatusAuthorized) { ABAddressBookRequestAccessWithCompletion(addressBook, ^(bool granted, CFErrorRef error) { dispatch_async(dispatch_get_main_queue(), ^{ if (error) { NSLog(@"Error: %@", (__bridge NSError *)error); } else if (!granted) { block(NO); } else { block(YES); } }); }); } else { block(YES); } }
可以在load页调用以让用户打开权限,以后在调用AddressBook相关操作时都使用此方法来调用,但是只有第一次调用iOS才会弹出允许的提示窗口,所以如果第一次被拒绝了,就只能跪求用户去设置里打开了。
[ActionHelper CheckAddressBookAuthorization:^(bool isAuthorized){ if(isAuthorized) { [self appViewPromptLoad:@"导入通讯录"]; ... } else { [self appViewPromptInfo:@"请到设置>隐私>通讯录打开本应用的权限设置"]; } }];
建议继续学习:
- mysql 1045(28000)错误 (阅读:4501)
- 文件明明存在但是file_exists总是返回FALSE (阅读:3837)
- Linux用户、用户组、文件权限学习笔记 (阅读:3533)
- crontab异常,无法自动运行 (阅读:3234)
- linux下如何自动提升权限 (阅读:3189)
- (oracle)11g与10g中alter session权限差异 (阅读:3085)
- ZooKeeper权限控制初探 (阅读:2753)
- mysql的权限信息的存储 (阅读:2289)
- 看看Gmail的新功能 (阅读:2034)
- IIS写权限利用续以及写权限漏洞来由解释 (阅读:1917)
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
扫一扫订阅我的微信号:IT技术博客大学习
<< 前一篇:苹果iOS系统下检查第三方APP是否安装及跳转启动
后一篇:Swift GCD 和延时调用 >>
文章信息
- 作者:风雨雷电堂 来源: 风雨雷电堂
- 标签: 权限 通讯录
- 发布时间:2016-02-16 20:45:46
建议继续学习
近3天十大热文
- [12] 产品设计之QQ邮箱登录页与淘宝登录页
- [12] Python连接 MySQL 数据库的超时问
- [10] 一个 VLA (可变长度数组)的实现
- [10] 手机客户端交互适配设计之我见
- [9] 没有比解决瓶颈更高效的事情了
- [9] 设计上的小细节
- [9] 一句话crontab实现防ssh暴力破解
- [9] 谈谈Facebook的聊天系统架构
- [8] 四年前的今天,我开始找工作
- [8] 页面线框图教程(之一):从本质到表象