总结下几个常用到的获取手机权限,从iOS8以后,获取手机某种权限需要在info.plist文件中添加权限的描述文件

    <key>NSContactsUsageDescription</key>
<string>App需要您的允许,才能访问通讯录</string>
<key>NSBluetoothPeripheralUsageDescription</key>
<string>App需要您的允许,才能访问蓝牙</string>
<key>NSCalendarsUsageDescription</key>
<string>App需要您的允许,才能访问日历</string>
<key>NSCameraUsageDescription</key>
<string>App需要您的允许,才能访问相机</string>
<key>NSHealthUpdateUsageDescription</key>
<string>App需要您的允许,才能访问健康更新 </string>
<key>NSLocationAlwaysUsageDescription</key>
<string></string>
<key>NSLocationUsageDescription</key>
<string>App需要您的允许,才能访问位置</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string></string>
<key>NSMicrophoneUsageDescription</key>
<string>App需要您的允许,才能访问麦克风</string>
<key>NSMotionUsageDescription</key>
<string>App需要您的允许,才能访问运动与健身</string>
<key>NSPhotoLibraryUsageDescription</key>
<string>App需要您的允许,才能访问相册</string>
<key>NSRemindersUsageDescription</key>
<string>App需要您的允许,才能访问提醒事项</string>

<!-- xcode9以后必须要加-->

<key>NSPhotoLibraryAddUsageDescription</key>

<string>App需要您的允许,才能访问相册</string>

 

1.通讯录

头文件

#import <AddressBook/AddressBook.h>

获取通讯录权限并请求授权

- (void)addressAuthorization{
ABAuthorizationStatus authStatus = ABAddressBookGetAuthorizationStatus();
if (authStatus == kABAuthorizationStatusNotDetermined) {
// 请求授权
ABAddressBookRef ressBookRef = ABAddressBookCreate();
ABAddressBookRequestAccessWithCompletion(ressBookRef, ^(bool granted, CFErrorRef error) {
if (granted) {
NSLog(@"授权成功!");
} else {
NSLog(@"授权失败!");
}
});
}
else if(authStatus == kABAuthorizationStatusRestricted || authStatus == kABAuthorizationStatusDenied) {
// 未授权 }
else{
// 已授权
}
}

2.相机

头文件

#import <AVFoundation/AVFoundation.h>
#import <AssetsLibrary/AssetsLibrary.h>

获取相机权限(直接跳相机,在跳到相机时,会提示是否允许访问相机)

- (void)cameraAuthorization{
AVAuthorizationStatus authStatus = [AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo];
if (authStatus == ALAuthorizationStatusDenied||authStatus == ALAuthorizationStatusRestricted) {
NSLog(@"未授权!");
return ;
}
}

3.相册

头文件

#import <AVFoundation/AVFoundation.h>
#import <AssetsLibrary/AssetsLibrary.h>

获取相册权限(直接跳相册,在跳到相册时,会提示是否允许访问相册)

- (void)photoAuthorization{
//判断是否已授权
ALAuthorizationStatus authStatus = [ALAssetsLibrary authorizationStatus];
if (authStatus == ALAuthorizationStatusDenied) {
NSLog(@"未授权!");
return;
}
}

4.日历

头文件

#import <EventKit/EventKit.h>

获取日历权限并请求授权

-(void)calendarAuthorization{
EKAuthorizationStatus authStatus = [EKEventStore authorizationStatusForEntityType:EKEntityTypeEvent];
if (EKAuthorizationStatusNotDetermined == authStatus) {
EKEventStore *event = [[EKEventStore alloc] init];
//授权成功,执行后续操作
[event requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error) {
if (granted) {
NSLog(@"授权成功!");
} else {
NSLog(@"授权失败!");
}
}];
}
else if(authStatus == EKAuthorizationStatusRestricted || authStatus == EKAuthorizationStatusDenied) {
// 未授权 }
else{
// 已授权
}
}

5.麦克风

头文件

获取麦克风权限并请求授权

- (void)microphoneAuthorization{
AVAuthorizationStatus authStatus = [AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeAudio];
if (authStatus == AVAuthorizationStatusNotDetermined) {// 未询问用户是否授权
//第一次询问用户是否进行授权
[[AVAudioSession sharedInstance] requestRecordPermission:^(BOOL granted) {
if (granted) {
NSLog(@"授权成功!");
}
else {
NSLog(@"授权失败!");
}
}];
}
else if(authStatus == AVAuthorizationStatusRestricted || authStatus == AVAuthorizationStatusDenied) {
// 未授权 }
else{
// 已授权
}
}

6.定位

头文件

#import <CoreLocation/CoreLocation.h>
#import <LocalAuthentication/LocalAuthentication.h>

获取定位权限(请求定位时,会提示是否允许访问位置)

- (void)locationAuthorization{
CLAuthorizationStatus authStatus = [CLLocationManager authorizationStatus];
//第一次询问用户是否进行授权
if (kCLAuthorizationStatusNotDetermined == authStatus) {
//[[[CLLocationManager alloc] init] requestWhenInUseAuthorization];
//开始定位用户的位置
//[self.locMgr startUpdatingLocation]; }
else if(authStatus == kCLAuthorizationStatusRestricted || authStatus == kCLAuthorizationStatusDenied) {
// 未授权
}
else{
// 已授权
} }

iOS-硬件授权检测【通讯录、相机、相册、日历、麦克风、定位授权】的更多相关文章

  1. iOS 硬件授权检测:定位服务、通讯录、日历、提醒事项、照片、蓝牙共享、麦克风、相机等(转)

    转载自:http://www.cocoachina.com/ios/20151214/14502.html iOS系统版本的不断升级的前提,伴随着用户使用设备的安全性提升,iOS系统对于App需要使用 ...

  2. 【转】iOS 硬件授权检测:定位服务、通讯录、日历、提醒事项、照片、蓝牙共享、麦克风、相机等

    iOS系统版本的不断升级的前提,伴随着用户使用设备的安全性提升,iOS系统对于App需要使用的硬件限制也越来越严格,App处理稍有不妥,轻则造成功能不可用用户还不知道,重则会造成App Crash. ...

  3. iOS 定位服务、通讯录、日历、提醒事项、照片、蓝牙共享、麦克风、相机等授权检测

    金田 iOS系统版本的不断升级的前提,伴随着用户使用设备的安全性提升,iOS系统对于App需要使用的硬件限制也越来越严格,App处理稍有不妥,轻则造成功能不可用用户还不知道,重则会造成App Cras ...

  4. iOS:检测多媒体(相机、相册、麦克风)设备权限,弹框提示

    一.感言 新年伊始,万象更新,一转眼,就2019年了. 作为一个科班生,从事移动端开发好几年了,回顾曾经的摸爬滚打,兢兢业业,严格的来说,多少算是入行了. 过去成绩如何暂且不说,新的一年,我当加倍努力 ...

  5. iOS开发小技巧--相机相册的正确打开方式

    iOS相机相册的正确打开方式- UIImagePickerController 通过指定sourceType来实现打开相册还是相机 UIImagePickerControllerSourceTypeP ...

  6. iOS开发——高级篇——通讯录

    一.简介 1.如何访问用户的通讯录1)在iOS9之前有2个框架可以访问用户的通讯录AddressBookUI.framework提供了联系人列表界面.联系人详情界面.添加联系人界面等一般用于选择联系人 ...

  7. iOS开发——高级技术&通讯录服务

    通讯录服务 AddressBook iOS中带有一 个Contacts应用程序来管理联系人,但是有些时候我们希望自己的应用能够访问或者修改这些信息,这个时候就要用到 AddressBook.frame ...

  8. iOS开发——高级技术&通讯录功能的实现

    通讯录功能的实现 iOS 提供了对通讯录操作的组建,其中一个是直接操作通讯录,另一个是调用通讯录的 UI 组建.实现方法如下: 添加AddressBook.framework到工程中. 代码实现: 1 ...

  9. iOS中判断照片和相机权限

    1.照片权限判断 在iOS6之后,app中使用照片(即自带相册)需要用户权限验证,所以我们可以做一个权限判断给出友好的提示或者界面效果. 相册判断需要导入 <AssetsLibrary/Asse ...

随机推荐

  1. Vijos P1103 校门外的树【线段树,模拟】

    校门外的树 描述 某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米.我们可以把马路看成一个数轴,马路的一端在数轴0的位置,另一端在L的位置:数轴上的每个整数点,即0,1,2,……, ...

  2. BZOJ1078: [SCOI2008]斜堆

    题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1078 每一次进入的点一定是一个极左节点,然后将它所处在的整棵树左右翻转.加上一些情况的处理. ...

  3. 打开redis和solr

  4. 全国银行列表json格式

    var list=[ { value:'CDB', text:'国家开发银行' }, { value:'ICBC', text:'中国工商银行' }, { value:'ABC', text:'中国农 ...

  5. 客户端怎么查看SVN的代码库

    安装SVN客户端,比如TortoiseSVN,然后将代码库checkout到本地,或者通过客户端的版本库浏览器直接连接SVN服务器查看代码库的目录结构. 如果SVN服务器端安装的时候是和Apache集 ...

  6. 在form里面,放了四个UEditor,怎么在后台分别获取它们值

    1) 默认情况下提交到后台的表单名称是 "editorValue",在editor_config.js中可以配置,参数名为textarea. 2) 可以在容器标签(即script标 ...

  7. webzip怎么用 如何用webzip下载整个网站?

    相信很多站长对webzip这款软件都并不感到陌生,它功能强大,能够完整下载网站的内容,或者你也可以选择自行设置下载的层数.文件类型.网页与媒体文件的定位等等.具体详情你可以在百度上去搜一下.由于web ...

  8. JavaScript常见封装方法

    1.最简单的,使用变量,然后用匿名函数包裹,不封装 2.对象字面量简单封装(不完整的模块模式,因为无法达到变量.方法私有效果.不过确实有分离和组织代码的能力,也就算一种简略的模块模式的实现方式) va ...

  9. CSS3 [attribute^=value] 选择器

    设置 class 属性值以 "test" 开头的所有 div 元素的背景色: div[class^="test"] { background:#ffff00; ...

  10. 03 整合IDEA+Maven+SSM框架的高并发的商品秒杀项目之web层

    Github:https://github.com/nnngu 项目源代码:https://github.com/nnngu/nguSeckill 前端交互流程设计 对于一个系统,需要产品经理.前端工 ...