iOS相册或相机访问遇到PHAuthorizationStatusNotDetermined或AVAuthorizationStatusNotDetermined的解决办法

最近做一个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中添加对应字段.且要调用对应的提示方法.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容