在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加强了通讯录访问控制,要求开发人员显式声明需要访问通讯录,方法是调用

方法,具体参见官方文档:

http://developer.apple.com/library/ios/#releasenotes/General/RN-iOSSDK-6_0/index.html

下面是对应的样例代码,一般来讲需要将这段代码放置在程序启动部分,在程序启动过程中提示用户本程序需要访问设备上的通讯录:

ABAddressBookRef addressBook = ABAddressBookCreate();

__block BOOL accessGranted = NO;

if (ABAddressBookRequestAccessWithCompletion != NULL) {

// we're on iOS 6

NSLog(@"on iOS 6 or later, trying to grant access permission");

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);

dispatch_release(sema);

}

else { // we're on iOS 5 or older

NSLog(@"on iOS 5 or older, it is OK");

accessGranted = YES;

}

if (accessGranted) {

NSLog(@"we got the access right");

}

java获取手机通讯录权限_iOS6 中如何获得通讯录访问权限相关推荐

  1. java 获取手机归属地_java 获取手机归属地

    java 获取手机归属地 [2021-01-30 20:46:44]  简介: php去除nbsp的方法:首先创建一个PHP代码示例文件:然后通过"preg_replace("/( ...

  2. Java中的四种访问权限:public、protected、包访问、private

    所谓访问权限,指的就是本类中的成员变量.成员方法对其他类的可见性 试想一想,当我们修改一个非常庞大的项目时,如果所有变量和方法都是公共权限,那么后端中任何类都有权限去修改它的变量和方法,很有可能修改后 ...

  3. 2003 文件服务器权限设置,win2003服务器设置文件访问权限

    win2003服务器设置文件访问权限 内容精选 换一换 如果您需要对华为云上购买的云手机(Cloud Phone,CPH)资源,给企业中的员工设置不同的访问权限,以达到不同员工之间的权限隔离,您可以使 ...

  4. java 获取手机联系人_Android 读取手机联系人、拨号、发送短信及长按菜单的操作...

    本示例实现了读取手机联系人,拨号.发送短信及长按出现菜单选项的操作↓ 1.Andrid项目结构图↓主要操作图中红色方框内的文件. 2.首先布局代码如下↓ a, main.xml 程序运行的主界面,主要 ...

  5. java获取手机安装app_Android之——获取手机安装的应用程序

    前几篇有关Android的博文中.向大家介绍了几个项目中经常使用的有用功能.那么在这篇博文中.我将向大家介绍怎样获取Android手机中已经安装的手机应用程序,有用过金山手机卫士或者360手机卫士的童 ...

  6. 通过java获取手机信息_android获取手机信息

    玩Android的朋友们进来看看吧! 1.获取手机安装的应用信息(排除系统自带): Java代码: 1 private String getAllApp() { 2 String result = & ...

  7. linux java 获取路径怎么写_linux中java获取路径的实例代码

    linux中java获取路径怎么写? 在Unix/Linux中,路径的分隔采用正斜"/",比如"cd /home/java". 在java的代码开发中 \ 是代 ...

  8. linux java 获取路径怎么写_linux中java获取路径怎么写?

    linux中java获取路径怎么写? 在Unix/Linux中,路径的分隔采用正斜"/",比如"cd /home/java". 在java的代码开发中 是代表转 ...

  9. 我的理解之JAVA中的4种访问权限

    一.Java中有四种访问权限,private.default(一般省略).public.protected. private: Java语言中对访问权限限制的最窄的修饰符,一般称之为"私有的 ...

最新文章

  1. Apache服务器和tomcat服务器有什么区别?
  2. shrinkwrap_Java EE 6测试第二部分– Arquillian和ShrinkWrap简介
  3. CreateThread函数
  4. git查看之前的提交日志
  5. python 最小二乘回归 高斯核_「机器学习」一文读懂线性回归、岭回归和Lasso回归...
  6. ceph查看卷_基于CEPH后端存储搭建Harbor
  7. C# WinForm TextBox 文本垂直居中实现
  8. 华为服务器 修改为传统模式,电脑设置成服务器模式
  9. 百度的AI赛事,正在启蒙一代年轻人
  10. coj #10066新的开始(最小生成树)
  11. 响应式布局对图片像素的解决
  12. 巨星传奇更新招股书:业务绑定歌手周杰伦 上半年营收降24%
  13. Python:爬山法/随机重启爬山法/允许侧移的爬山法解决八皇后问题
  14. 3D打印机内网联机打印(1)orangpiPlus安装Octoprint
  15. Cobbler自动化部署
  16. 找出词典中的所有的变位词 --By LXW
  17. 【Codevs 1376】帕秋莉•诺蕾姬
  18. python开源软件排行榜_10大Python开源项目推荐(Github平均star2135)
  19. 回顾2018年圆齿轮流量计行业发展现状
  20. 18.时钟芯片DS1302

热门文章

  1. Android 双屏异显(兼容android8)
  2. ISO8583包简介和源代码
  3. idea使用中项目出现library root
  4. 在配置SSH免密登录时报错:/usr/bin/ssh-copy-id: ERROR: failed to open ID file '/root/.pub': 没有那个文件或目录
  5. python制作浏览器
  6. 做PPT别再傻乎乎的直接插入图片了,手把手教你处理毛玻璃式图片
  7. 阴阳师服务器维护结界卡,阴阳师近期结界卡断粮 详解原因及解决办法
  8. 如何用Tableau可视化?
  9. 谁说NTFS不支持UEFI启动的?启动U盘放不了超过4G的文件怎么办?Server2016 Win10 U盘UEFI启动制作方法
  10. 机械/电信/生物/化学专业出身,为啥都要转行计算机?