Photos框架的使用总结(三)授权状态的总结
2018-02-28 本文已影响25人
Rui哥
一 请求用户相册授权状态的总结
- 我是这么处理的
typedef enum {
PHAuthorizationType_Restricted,//被限制,不能访问相册
PHAuthorizationType_Denied, // 用户拒绝
PHAuthorizationType_DeniedNeedShowTip,//用户拒绝需要提示打开思路
PHAuthorizationType_Authorized// 用户允许访问
}PHAuthorizationType;
/** 获取用户 相册访问的权限, */
+(void)fetchPHAuthorizationTypeCallBack:(void(^)(PHAuthorizationType authorizationType))authorizationTypeCallBack;{
// 1. 获取当前的授权状态
PHAuthorizationStatus oldStatus = [PHPhotoLibrary authorizationStatus];
/** 请求\ 查询访问权限
1.如果用户之前还没做出选择(第一次使用),会自动弹框.弹框后用户做出选择,才会调用block
2.如果用户之前做过选择了会直接回调block,并且不会弹框.
3.也就是说 block 只有在用户 做过选择后才会调用,也就是说不会出现 用户不确定的情况(PHAuthorizationStatusNotDetermined)
*/
[PHPhotoLibrary requestAuthorization:^(PHAuthorizationStatus status) {
// block 子线程调用
dispatch_async(dispatch_get_main_queue(), ^{
if (status == PHAuthorizationStatusRestricted) {
// 用户被限制,不能使用
authorizationTypeCallBack(PHAuthorizationType_Restricted);
}
else if (status == PHAuthorizationStatusDenied) {
if(oldStatus == PHAuthorizationStatusNotDetermined){
//弹框后用户选择 拒绝
authorizationTypeCallBack(PHAuthorizationType_Denied);
}else{
// 需要弹框告诉用户打开
authorizationTypeCallBack(PHAuthorizationType_DeniedNeedShowTip);
}
}
else if (status == PHAuthorizationStatusAuthorized) {//用户未决定
// 用户可以使用
authorizationTypeCallBack(PHAuthorizationType_Authorized);
}
});
NSLog(@"status : %ld",status);
}];
}
[PHPhotoLibrary requestAuthorization:^(PHAuthorizationStatus status) {
// block 子线程调用
}]; 这个方法的block 只有在用户选择过同意\不同意后才会回调block, 当是当block 回调的状态是PHAuthorizationStatusDenied时需要明确这个"拒绝结果"是用户现在本地弹框选择的直接结果,还是上次用户打开应用时就一已经选择的结果,如果是上次的选择的结果需要再次提示用户开启授权的思路.