iOS开发中的权限
权限分类
联网权限
相册权限
相机、麦克风权限
定位权限
推送权限
通讯录权限
日历、备忘录权限
联网权限
引入头文件 @import CoreTelephony;
应用启动后,检测应用中是否有联网权限
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
CTCellularData *cellularData = [[CTCellularData alloc]init]; cellularData.cellularDataRestrictionDidUpdateNotifier = ^(CTCellularDataRestrictedState state){ //获取联网状态 switch (state) { case kCTCellularDataRestricted: NSLog(@ "Restricrted" ); break ; case kCTCellularDataNotRestricted: NSLog(@ "Not Restricted" ); break ; case kCTCellularDataRestrictedStateUnknown: NSLog(@ "Unknown" ); break ; default : break ; }; }; |
查询应用是否有联网功能
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
CTCellularData *cellularData = [[CTCellularData alloc]init]; CTCellularDataRestrictedState state = cellularData.restrictedState; switch (state) { case kCTCellularDataRestricted: NSLog(@ "Restricrted" ); break ; case kCTCellularDataNotRestricted: NSLog(@ "Not Restricted" ); break ; case kCTCellularDataRestrictedStateUnknown: NSLog(@ "Unknown" ); break ; default : break ; } |
相册权限
iOS 9.0之前
导入头文件@import AssetsLibrary;
检查是否有相册权限
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
ALAuthorizationStatus status = [ALAssetsLibrary authorizationStatus]; switch (status) { case ALAuthorizationStatusAuthorized: NSLog(@ "Authorized" ); break ; case ALAuthorizationStatusDenied: NSLog(@ "Denied" ); break ; case ALAuthorizationStatusNotDetermined: NSLog(@ "not Determined" ); break ; case ALAuthorizationStatusRestricted: NSLog(@ "Restricted" ); break ; default : break ; } |
相册权限--iOS 8.0之后
导入头文件@import Photos;
检查是否有相册权限
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
PHAuthorizationStatus photoAuthorStatus = [PHPhotoLibrary authorizationStatus]; switch (photoAuthorStatus) { case PHAuthorizationStatusAuthorized: NSLog(@ "Authorized" ); break ; case PHAuthorizationStatusDenied: NSLog(@ "Denied" ); break ; case PHAuthorizationStatusNotDetermined: NSLog(@ "not Determined" ); break ; case PHAuthorizationStatusRestricted: NSLog(@ "Restricted" ); break ; default : break ; } |
![Uploading 144446-b8aca7ba38c5f8c0_695906.png . . .]获取相册权限
1
2
3
4
5
6
7
|
[PHPhotoLibrary requestAuthorization:^(PHAuthorizationStatus status) { if (status == PHAuthorizationStatusAuthorized) { NSLog(@ "Authorized" ); } else { NSLog(@ "Denied or Restricted" ); } }]; |
相机和麦克风权限
导入头文件@import AVFoundation;
检查是否有相机或麦克风权限
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
AVAuthorizationStatus AVstatus = [AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo]; //相机权限 AVAuthorizationStatus AVstatus = [AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeAudio]; //麦克风权限 switch (AVstatus) { case AVAuthorizationStatusAuthorized: NSLog(@ "Authorized" ); break ; case AVAuthorizationStatusDenied: NSLog(@ "Denied" ); break ; case AVAuthorizationStatusNotDetermined: NSLog(@ "not Determined" ); break ; case AVAuthorizationStatusRestricted: NSLog(@ "Restricted" ); break ; default : break ; } |
获取相机或麦克风权限
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
[AVCaptureDevice requestAccessForMediaType:AVMediaTypeVideo completionHandler:^(BOOL granted) { //相机权限 if (granted) { NSLog(@ "Authorized" ); } else { NSLog(@ "Denied or Restricted" ); } }]; [AVCaptureDevice requestAccessForMediaType:AVMediaTypeAudio completionHandler:^(BOOL granted) { //麦克风权限 if (granted) { NSLog(@ "Authorized" ); } else { NSLog(@ "Denied or Restricted" ); } }]; |
定位权限
导入头文件@import CoreLocation;
由于iOS8.0之后定位方法的改变,需要在info.plist中进行配置;
配置文件
检查是否有定位权限
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
BOOL isLocation = [CLLocationManager locationServicesEnabled]; if (!isLocation) { NSLog(@ "not turn on the location" ); } CLAuthorizationStatus CLstatus = [CLLocationManager authorizationStatus]; switch (CLstatus) { case kCLAuthorizationStatusAuthorizedAlways: NSLog(@ "Always Authorized" ); break ; case kCLAuthorizationStatusAuthorizedWhenInUse: NSLog(@ "AuthorizedWhenInUse" ); break ; case kCLAuthorizationStatusDenied: NSLog(@ "Denied" ); break ; case kCLAuthorizationStatusNotDetermined: NSLog(@ "not Determined" ); break ; case kCLAuthorizationStatusRestricted: NSLog(@ "Restricted" ); break ; default : break ; } |
获取定位权限
1
2
3
|
CLLocationManager *manager = [[CLLocationManager alloc] init]; [manager requestAlwaysAuthorization]; //一直获取定位信息 [manager requestWhenInUseAuthorization]; //使用的时候获取定位信息 |
在代理方法中查看权限是否改变
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
- (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status{ switch (status) { case kCLAuthorizationStatusAuthorizedAlways: NSLog(@ "Always Authorized" ); break ; case kCLAuthorizationStatusAuthorizedWhenInUse: NSLog(@ "AuthorizedWhenInUse" ); break ; case kCLAuthorizationStatusDenied: NSLog(@ "Denied" ); break ; case kCLAuthorizationStatusNotDetermined: NSLog(@ "not Determined" ); break ; case kCLAuthorizationStatusRestricted: NSLog(@ "Restricted" ); break ; default : break ; } } |
推送权限
检查是否有通讯权限
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
UIUserNotificationSettings *settings = [[UIApplication sharedApplication] currentUserNotificationSettings]; switch (settings.types) { case UIUserNotificationTypeNone: NSLog(@ "None" ); break ; case UIUserNotificationTypeAlert: NSLog(@ "Alert Notification" ); break ; case UIUserNotificationTypeBadge: NSLog(@ "Badge Notification" ); break ; case UIUserNotificationTypeSound: NSLog(@ "sound Notification'" ); break ; default : break ; } |
获取推送权限
1
2
|
UIUserNotificationSettings *setting = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeSound | UIUserNotificationTypeAlert | UIUserNotificationTypeBadge categories:nil]; [[UIApplication sharedApplication] registerUserNotificationSettings:setting]; |
通讯录权限
iOS 9.0之前
导入头文件 @import AddressBook;
检查是否有通讯录权限
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
ABAuthorizationStatus ABstatus = ABAddressBookGetAuthorizationStatus(); switch (ABstatus) { case kABAuthorizationStatusAuthorized: NSLog(@ "Authorized" ); break ; case kABAuthorizationStatusDenied: NSLog(@ "Denied'" ); break ; case kABAuthorizationStatusNotDetermined: NSLog(@ "not Determined" ); break ; case kABAuthorizationStatusRestricted: NSLog(@ "Restricted" ); break ; default : break ; } |
获取通讯录权限
1
2
3
4
5
6
7
8
9
|
ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, NULL); ABAddressBookRequestAccessWithCompletion(addressBook, ^(bool granted, CFErrorRef error) { if (granted) { NSLog(@ "Authorized" ); CFRelease(addressBook); } else { NSLog(@ "Denied or Restricted" ); } }); |
iOS 9.0及以后
导入头文件 @import Contacts;
检查是否有通讯录权限
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
CNAuthorizationStatus status = [CNContactStore authorizationStatusForEntityType:CNEntityTypeContacts]; switch (status) { case CNAuthorizationStatusAuthorized: { NSLog(@ "Authorized:" ); } break ; case CNAuthorizationStatusDenied:{ NSLog(@ "Denied" ); } break ; case CNAuthorizationStatusRestricted:{ NSLog(@ "Restricted" ); } break ; case CNAuthorizationStatusNotDetermined:{ NSLog(@ "NotDetermined" ); } break ; } |
获取通讯录权限
1
2
3
4
5
6
7
8
9
10
|
CNContactStore *contactStore = [[CNContactStore alloc] init]; [contactStore requestAccessForEntityType:CNEntityTypeContacts completionHandler:^(BOOL granted, NSError * _Nullable error) { if (granted) { NSLog(@ "Authorized" ); } else { NSLog(@ "Denied or Restricted" ); } }]; |
日历、备忘录权限
导入头文件
检查是否有日历或者备忘录权限
1
2
3
4
|
typedef NS_ENUM(NSUInteger, EKEntityType) { EKEntityTypeEvent, //日历 EKEntityTypeReminder //备忘 }; |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
EKAuthorizationStatus EKstatus = [EKEventStore authorizationStatusForEntityType:EKEntityTypeEvent]; switch (EKstatus) { case EKAuthorizationStatusAuthorized: NSLog(@ "Authorized" ); break ; case EKAuthorizationStatusDenied: NSLog(@ "Denied'" ); break ; case EKAuthorizationStatusNotDetermined: NSLog(@ "not Determined" ); break ; case EKAuthorizationStatusRestricted: NSLog(@ "Restricted" ); break ; default : break ; } |
获取日历或备忘录权限
1
2
3
4
5
6
7
8
|
EKEventStore *store = [[EKEventStore alloc]init]; [store requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError * _Nullable error) { if (granted) { NSLog(@ "Authorized" ); } else { NSLog(@ "Denied or Restricted" ); } }]; |
最后一点
素有获取权限的方法,多用于用户第一次操作应用,iOS 8.0之后,将这些设置都整合在一起,并且可以开启或关闭相应的权限。所有的权限都可以通过下面的方法打开:
1
|
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString |
iOS开发中的权限的更多相关文章
- 再续iOS开发中的这些权限
前言 上篇文章iOS开发中的这些权限,你搞懂了吗?介绍了一些常用权限的获取和请求方法,知道这些方法的使用基本上可以搞定大部分应用的权限访问的需求.但是,这些方法并不全面,不能涵盖住所有权限访问的方法. ...
- iOS开发中权限再度梳理
前言 上篇文章iOS开发中的这些权限,你搞懂了吗?介绍了一些常用权限的获取和请求方法,知道这些方法的使用基本上可以搞定大部分应用的权限访问的需求.但是,这些方法并不全面,不能涵盖住所有权限访问的方法. ...
- ios开发中的小技巧
在这里总结一些iOS开发中的小技巧,能大大方便我们的开发,持续更新. UITableView的Group样式下顶部空白处理 //分组列表头部空白处理 UIView *view = [[UIViewal ...
- fir.im Weekly - iOS开发中的Git流程
本期 fir.im Weekly 收集了微博上的热转资源,包含 Android.iOS 开发工具.源码等好用的轮子,还有一些 APP 设计的 Tips,希望对你有用. 精仿知乎日报 iOS 端 @我偏 ...
- 在iOS开发中使用FMDB
在iOS开发中使用FMDB 前言 SQLite (http://www.sqlite.org/docs.html) 是一个轻量级的关系数据库.iOS SDK 很早就支持了 SQLite,在使用时,只需 ...
- 【转】在iOS开发中使用FMDB
本文转载自:唐巧的博客 在iOS开发中使用FMDB APR 22ND, 2012 前言 SQLite (http://www.sqlite.org/docs.html) 是一个轻量级的关系数据库.iO ...
- 总结iOS开发中的断点续传那些事儿
前言 断点续传概述 断点续传就是从文件赏赐中断的地方重新开始下载或者上传数据,而不是从头文件开始.当下载大文件的时候,如果没有实现断点续传功能,那么每次出现异常或者用户主动的暂停,都会从头下载,这样很 ...
- iOS开发中静态库之".framework静态库"的制作及使用篇
iOS开发中静态库之".framework静态库"的制作及使用篇 .framework静态库支持OC和swift .a静态库如何制作可参照上一篇: iOS开发中静态库之" ...
- iOS开发中静态库制作 之.a静态库制作及使用篇
iOS开发中静态库之".a静态库"的制作及使用篇 一.库的简介 1.什么是库? 库是程序代码的集合,是共享程序代码的一种方式 2.库的类型? 根据源代码的公开情况,库可以分为2种类 ...
随机推荐
- LeetCode之226. Invert Binary Tree
------------------------------------- 反转树的基本操作. 可是下面那句话是什么鬼啊,这么牛掰的人都会有这种遭遇,确实抚慰了一点最近面试被拒的忧伤..... AC代 ...
- intellij idea 插件 ideaVim 用法
intellij idea 插件 ideaVim - Genji_ - 博客园http://www.cnblogs.com/nova-/p/3535636.html IdeaVim插件使用技巧 - - ...
- Linux常用命令学习8---(用户和用户组管理)
1.用户和用户组 用户和用户组概念 用户:使用操作系统的人(Linux支持多个用户在同一时间登陆同一个操作系统) 用户组:具有相同权限的一组用户(Linux系统中可 ...
- 【转载】 删除Win10“这台电脑”中的6个文件夹
转载地址:http://www.myxzy.com/post-431.html Windows 8.1/windows 10对比windows 7都有一个变化,打开“这台电脑”(或“我的电脑”)后,“ ...
- FTP协议及工作原理
1. FTP协议 什么是FTP呢?FTP 是 TCP/IP 协议组中的协议之一,是英文File Transfer Protocol的缩写. 该协议是Internet文件传送的基础,它由一系列规格说明文 ...
- 字符串数组初始化0 与memset 0 效率的分析
转自:http://www.xuebuyuan.com/1722207.html 结合http://blog.sina.com.cn/s/blog_59d470310100gov8.html来看. 最 ...
- 数据库密码爆破HexorBase
数据库密码爆破HexorBase 数据库服务是服务器上最常见的一类服务.由于数据库保存大量的敏感信息,所以它的安全非常重要.测试数据库服务安全的重要方式,就是检查口令的强壮度. Kali Li ...
- featherview模板引擎
1.判断语法 <?php if(isset($value['fromVR']) && !empty($value['fromVR'])) {?> <s class=& ...
- 命名函数、eval创建局部变量
1.命名函数 var f = function double(){return x *2;} 该语句将函数绑定到变量f,而不是变量double 匿名的函数表达式: var f = function(x ...
- 淘宝弹性布局方案lib-flexible实践
2个月前,写过一篇文章<从网易与淘宝的font-size思考前端设计稿与工作流>总结过一些移动web中有关手机适配的一些思路,当时也是因为工作的关系分析了下网易跟淘宝的移动页面,最后才有那 ...