最近做一个app时,需要用到照片和相机.在第一次调用的时候遇到了闪退的现象.查看了一下状态发现照片和相机返回的状态为NotDetermined.
照片访问权限说明(iOS 8以后需要设置访问权限):
typedef NS_ENUM(NSInteger, PHAuthorizationStatus) {
PHAuthorizationStatusNotDetermined = 0, // 默认还没做出选择
PHAuthorizationStatusRestricted, // 此应用程序没有被授权访问的照片数据
PHAuthorizationStatusDenied, // 用户已经明确否认了这一照片数据的应用程序访问
PHAuthorizationStatusAuthorized // 用户已经授权应用访问照片数据
} NS_AVAILABLE_IOS(8_0);
相机访问权限说明(iOS 8以后需要设置访问权限):
typedef NS_ENUM(NSInteger, AVAuthorizationStatus) {
AVAuthorizationStatusNotDetermined = 0,// 系统还未知是否访问,第一次开启相机时
AVAuthorizationStatusRestricted, // 受限制的
AVAuthorizationStatusDenied, //不允许
AVAuthorizationStatusAuthorized // 允许状态
} NS_AVAILABLE_IOS(7_0) __TVOS_PROHIBITED;
在这里就只对NotDetermined状态进行说明:
如果遇到NotDetermined状态.
照片需要调用以下方法让用户选择是否允许访问照片(调用下面方法前需在info.plist中添加Privacy - Photo Library Usage Description,否则无法调用下面方法):
[AVCaptureDevice requestAccessForMediaType:mediaType completionHandler:^(BOOL granted) {
dispatch_async(dispatch_get_main_queue(), ^{
if (granted) {
//允许访问
}else{
//不允许访问
}
});
}];
相机需要调用以下方法让用户选择是否允许访问相机(调用下面方法前需在info.plist中添加Privacy - Camera Usage Description,否则无法调用下面方法):
[PHPhotoLibrary requestAuthorization:^(PHAuthorizationStatus status) {
if (status == PHAuthorizationStatusAuthorized) {
//允许访问
}
if (status == PHAuthorizationStatusRestricted || status == PHAuthorizationStatusDenied) {
//不允许
}
}];
注释:若使用手机其他功能遇到访问不了的情况,都可以查看一下用户是否做出选择.若没有做出选择,需要在info.plist中添加对应字段.且要调用对应的提示方法.
网友评论