UIImagePickerController在iOS11访问相册
iOS11来了以后,最近审核被拒绝,原因是:弹出系统权限的时候,必须说出用途。否则会被以
//相册权限
NSInteger status = [self.classauthorizationStatus];
if (status == 0) {
/**
* 当某些情况下AuthorizationStatus == AuthorizationStatusNotDetermined时,无法弹出系统首次使用的授权alertView,系统应用设置里亦没有相册的设置,此时将无法使用,故作以下操作,弹出系统首次使用的授权alertView
*/
[selfrequestAuthorizationWithCompletion:nil];
}
- (void)requestAuthorizationWithCompletion:(void (^)())completion {
void (^callCompletionBlock)() = ^(){
dispatch_async(dispatch_get_main_queue(), ^{
if (completion) {
completion();
}
});
};
if (iOS8Later) {
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0), ^{
[PHPhotoLibraryrequestAuthorization:^(PHAuthorizationStatus status) {
callCompletionBlock();
}];
});
} else {
[self.assetLibraryenumerateGroupsWithTypes:ALAssetsGroupAllusingBlock:^(ALAssetsGroup *group,BOOL *stop) {
callCompletionBlock();
} failureBlock:^(NSError *error) {
callCompletionBlock();
}];
}
}
当 status = 3;是用户点击了允许,是默认可以的。
其他值的时候如下:
当不是允许的时候这个时候,我们就可以做到与系统一样的效果了,甚至比它的效果还要好,上面的代码即可提示了,
我们还可以加一些其他的操作,当选择允许的时候,那就开始你之前的代码直接进入相册,不是选择允许的话,我们就可以写个界面加个跳转,效果可能会更好
NSString *appName = [infoDict valueForKey:@"CFBundleDisplayName"];
if (!appName) appName = [infoDict valueForKey:@"CFBundleName"];
NSString *tipText = [NSStringstringWithFormat:[NSBundletz_localizedStringForKey:@"Allow %@ to access your album in \"Settings -> Privacy -> Photos\""],appName];
_tipLabel.text = tipText;
[PhotobgViewaddSubview:_tipLabel];
NSString *settingBtnTitleStr = [NSBundletz_localizedStringForKey:@"Setting"];
if (iOS8Later) {
_settingBtn = [UIButtonbuttonWithType:UIButtonTypeSystem];
[_settingBtn setTitle:settingBtnTitleStr forState:UIControlStateNormal];
_settingBtn.frame =CGRectMake(0,180, self.view.tz_width,44);
_settingBtn.titleLabel.font = [UIFontsystemFontOfSize:18];
[_settingBtnaddTarget:selfaction:@selector(settingBtnClick)forControlEvents:UIControlEventTouchUpInside];
[PhotobgViewaddSubview:_settingBtn];
}
_timer = [NSTimerscheduledTimerWithTimeInterval:0.2target:selfselector:@selector(observeAuthrizationStatusChange)userInfo:nilrepeats:YES];
这个是跳转到相册权限
[[UIApplication sharedApplication]openURL:[NSURLURLWithString:UIApplicationOpenSettingsURLString]];
而我加一个时钟是为了时时刻刻监听相册权限,一旦打开,立刻把自己写的东西移除了。
if ([[TZImageManagermanager] authorizationStatusAuthorized]) {}
这里面操作,直接进入相册了。
大致思路就是这个,我把效果图截图一下:
UIImagePickerController在iOS11访问相册相关推荐
- iOS11 访问相册、相机权限
一. iOS11之前:访问相册和存储照片到相册(读写权限),需要用户授权,需要添加NSPhotoLibraryUsageDescription. 二.iOS11之后:默认开启访问相册权限(读权限),无 ...
- iOS访问相册及拍照保存的实现实例
iOS访问相册及拍照保存的实现实例 实现效果: 1.点击访问相册按钮,可以访问系统相册,选择以后返回在imageView中显示 2.点击拍照,访问摄像头,实现以后保存在相册中,返回在imageView ...
- android 调用相册权限,采坑之Android手机访问相册权限问题
问题描述 Android端APP 在6.0以上系统无法访问相册和拍照 经过 1.项目是一个后期接手的项目,在早期开发版本中没有注册相机权限,使用拍照时直接调用相机没有做相机权限检测,部分国产手机(小米 ...
- android访问相册、拍照
在访问相册的时候由于是跨进程访问相册资源,所以必须具备ContentProvider的基本知识,使用相机的时候需要指定照片存储位置,需要具备FileProvider的原理和使用 由于访问相册和使用相机 ...
- Android7.0调用系统相机拍照、访问相册问题。
关于Android7.0调用系统相机拍照.访问相册的一些问题: 在Android6.0中Google提出了动态申请权限的Api,调用相机拍照,访问SDcard等操作都需要先申请对应的权限如下: < ...
- android 直接访问相册图片_MediaStore
官方总结 https://developer.android.google.cn/training/data-storage?hl=zh-cn Demo (MediaStore 访问相册图片) < ...
- app无法访问相册,设置-隐私-相册里也没有该app
问题缘由 今天突然遇到访问相册,没东西,隐私里也没有显示该项目名字,别的访问相册的app有显示 ,包括打开相机等等权限失效.不管真机模拟器情况一样. 自己我觉得可能是自己的项目被复制了一个新的版本运行 ...
- Android 访问相册切换背景
前言 Gilde框架用起来爽的不行,啊,pong友们可以百度了解.XIO习一下 初识图片加载框架--Glide的简单用法 前端代码 1.activity_main.xml <LinearLayo ...
- 小米拒绝权限_小米手机 MIUI 12 测试新隐私保护:可设置每个应用是否允许访问相册和信息存储目录...
新闻转自IT之家 骑士 IT之家11月8日消息 近期,小米社区开启隐私保护新功能一「 相册和社交应用信息保护」内测.IT之家获悉,新功能特性包括支持设置每个应用是否允许访问手机相册存储目录和社交应用信 ...
最新文章
- java循环基础知识_java基础知识—循环结构
- 二叉树层次遍历--广度遍历和深度遍历
- 4渲染导出_Civil 3D:导出道路数据的 5 个步骤都在这里了
- The library 'SocialSDK_QQZone_2.jar' contains nat
- session 分布式处理-----https://segmentfault.com/a/1190000013447750?utm_source=tag-newest
- matlab中realmax
- ubuntu openStack icehouse dashboard theme自定义
- 在 WINDOWS 7 的 XAMPP 安裝 MEMCACHED 擴展
- 2013搜狐移动互联战略
- V20西门子变频器怎么选型
- 用JSON-server模拟REST API
- 提取pdf目录的方法
- 你的格局决定你的结局
- iOS Xcode中UIButton文字换行
- rep()函数的学习
- oracle 认识点概述(一)
- 【SSLGZ 2134】猫猫的小鱼
- python保留n位有效数字
- f_lseek_C语言中lseek()函数和fseek()函数的使用详解
- C++怎么判断windows系统是64位还是32位