iOS-硬件授权检测【通讯录、相机、相册、日历、麦克风、定位授权】
总结下几个常用到的获取手机权限,从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-硬件授权检测【通讯录、相机、相册、日历、麦克风、定位授权】的更多相关文章
- iOS 硬件授权检测:定位服务、通讯录、日历、提醒事项、照片、蓝牙共享、麦克风、相机等(转)
转载自:http://www.cocoachina.com/ios/20151214/14502.html iOS系统版本的不断升级的前提,伴随着用户使用设备的安全性提升,iOS系统对于App需要使用 ...
- 【转】iOS 硬件授权检测:定位服务、通讯录、日历、提醒事项、照片、蓝牙共享、麦克风、相机等
iOS系统版本的不断升级的前提,伴随着用户使用设备的安全性提升,iOS系统对于App需要使用的硬件限制也越来越严格,App处理稍有不妥,轻则造成功能不可用用户还不知道,重则会造成App Crash. ...
- iOS 定位服务、通讯录、日历、提醒事项、照片、蓝牙共享、麦克风、相机等授权检测
金田 iOS系统版本的不断升级的前提,伴随着用户使用设备的安全性提升,iOS系统对于App需要使用的硬件限制也越来越严格,App处理稍有不妥,轻则造成功能不可用用户还不知道,重则会造成App Cras ...
- iOS:检测多媒体(相机、相册、麦克风)设备权限,弹框提示
一.感言 新年伊始,万象更新,一转眼,就2019年了. 作为一个科班生,从事移动端开发好几年了,回顾曾经的摸爬滚打,兢兢业业,严格的来说,多少算是入行了. 过去成绩如何暂且不说,新的一年,我当加倍努力 ...
- iOS开发小技巧--相机相册的正确打开方式
iOS相机相册的正确打开方式- UIImagePickerController 通过指定sourceType来实现打开相册还是相机 UIImagePickerControllerSourceTypeP ...
- iOS开发——高级篇——通讯录
一.简介 1.如何访问用户的通讯录1)在iOS9之前有2个框架可以访问用户的通讯录AddressBookUI.framework提供了联系人列表界面.联系人详情界面.添加联系人界面等一般用于选择联系人 ...
- iOS开发——高级技术&通讯录服务
通讯录服务 AddressBook iOS中带有一 个Contacts应用程序来管理联系人,但是有些时候我们希望自己的应用能够访问或者修改这些信息,这个时候就要用到 AddressBook.frame ...
- iOS开发——高级技术&通讯录功能的实现
通讯录功能的实现 iOS 提供了对通讯录操作的组建,其中一个是直接操作通讯录,另一个是调用通讯录的 UI 组建.实现方法如下: 添加AddressBook.framework到工程中. 代码实现: 1 ...
- iOS中判断照片和相机权限
1.照片权限判断 在iOS6之后,app中使用照片(即自带相册)需要用户权限验证,所以我们可以做一个权限判断给出友好的提示或者界面效果. 相册判断需要导入 <AssetsLibrary/Asse ...
随机推荐
- AtCoder Regular Contest 078
我好菜啊,ARC注定出不了F系列.要是出了说不定就橙了. C - Splitting Pile 题意:把序列分成左右两部分,使得两边和之差最小. #include<cstdio> #inc ...
- BZOJ 1012: [JSOI2008]最大数maxnumber【线段树单点更新求最值,单调队列,多解】
1012: [JSOI2008]最大数maxnumber Time Limit: 3 Sec Memory Limit: 162 MBSubmit: 10374 Solved: 4535[Subm ...
- HDU--2011
多项式求和 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Subm ...
- HDFS命令全总结
.copyFromLocal hadoop fs -copyFromLocal -f dcnew.reg_user_actret.csv /dw/test/reg_user_actret_test # ...
- python面向对象进阶
前言 上节大话python面向对象对面向对象有了一些了解,这次就不用大话风格了 (ps:真心不好扯啊) isinstance与issubclass isinstance(obj,cls)检查是否obj ...
- Spring学习日志之Spring MVC启动配置
对DispatcherServlet进行配置 Spring MVC的配置实际上就是对DispatcherServlet的配置 public class DispatcherServletConfig ...
- 【JAVA】SWING_ 界面风格
在java中,界面外观的管理是由UIManager类来管理的.不同的系统上安装的外观不一样 ,默认的是java的跨平台外观. 1.获取系统所有外观 import javax.swing.*; impo ...
- 阻止浏览器冒泡事件,兼容firefox和ie
//得到事件 function getEvent(){ if(window.event) {return window.event;} func=getEvent.caller; while(func ...
- [学习OpenCV攻略][016][RedHat下安装OpenCV]
安装环境 操作系统: Red Hat Enterprise Linux Server 6.3 相关软件: ffmpeg-0.8.15.tar.bz2.cmake-3.5.1.tar.gz.OpenCV ...
- vhost:一种 virtio 高性能的后端驱动实现
什么是 vhost vhost 是 virtio 的一种后端实现方案,在 virtio 简介中,我们已经提到 virtio 是一种半虚拟化的实现方案,需要虚拟机端和主机端都提供驱动才能完成通信,通常, ...