iphone 相册权限没办法开启_苹果请求访问App将在此处显示

iphone 相册权限没办法开启_苹果请求访问App将在此处显示一:打开相册不提示用户权限问题描述:iOS11已经在plist文件中写了相关权限设置,但是在使用UIImagePickerController打开相册的时候却不提示用户选择权限,有以下几条情况:UIImagePickerController同样的设置使用相机会有权限选择提示,设置中也没有关于相册的设置;项目中有用到TZImagePickerCont…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

一:打开相册不提示用户权限

问题描述:iOS11已经在plist文件中写了相关权限设置,但是在使用UIImagePickerController打开相册的时候却不提示用户选择权限,有以下几条情况:

  1. UIImagePickerController同样的设置使用相机会有权限选择提示,设置中也没有关于相册的设置;
  2. 项目中有用到TZImagePickerController的第三方库多选照片,他在进入图库的时候就会有权限提示,设置中关于相册的权限是:读与写;
  3. 将图片保存进手机相册会有权限提醒,设置中关于相册的权限是:写入;

带着以上疑问我看了TZImagePickerController的源码,发现他其实是在发现PHAuthorizationStatus为用户未作出明确选择的情况下自己主动请求了一次权限设置,代码如下:

/// Return YES if Authorized 返回YES如果得到了授权
- (BOOL)authorizationStatusAuthorized {
    NSInteger status = [self.class authorizationStatus];
    if (status == 0) {
        /**
         * 当某些情况下AuthorizationStatus == AuthorizationStatusNotDetermined时,无法弹出系统首次使用的授权alertView,系统应用设置里亦没有相册的设置,此时将无法使用,故作以下操作,弹出系统首次使用的授权alertView
         */
        [self requestAuthorizationWithCompletion:nil];
    }
    
    return status == 3;
}

+ (NSInteger)authorizationStatus {
    if (iOS8Later) {
        return [PHPhotoLibrary authorizationStatus];
    } else {
        return [ALAssetsLibrary authorizationStatus];
    }
    return NO;
}

- (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), ^{
            [PHPhotoLibrary requestAuthorization:^(PHAuthorizationStatus status) {
                callCompletionBlock();
            }];
        });
    } else {
        [self.assetLibrary enumerateGroupsWithTypes:ALAssetsGroupAll usingBlock:^(ALAssetsGroup *group, BOOL *stop) {
            callCompletionBlock();
        } failureBlock:^(NSError *error) {
            callCompletionBlock();
        }];
    }
}

注:这里主动请求代码权限获得允许后不会跟系统的提示一样直接跳到相册,需要自己通过判断确定,TZImagePickerController的处理办法如下,当然也可以自己在权限设置的block里面设置

//下判断权限,如果没有权限就会先展示一个自定义的页面,然后开始定时器来判断是否已经获取权限,如果获取到权限则跳转到选择图片页面
if (![[TZImageManager manager] authorizationStatusAuthorized]) {
            _tipLabel = [[UILabel alloc] init];
            _tipLabel.frame = CGRectMake(8, 120, self.view.tz_width - 16, 60);
            _tipLabel.textAlignment = NSTextAlignmentCenter;
            _tipLabel.numberOfLines = 0;
            _tipLabel.font = [UIFont systemFontOfSize:16];
            _tipLabel.textColor = [UIColor blackColor];
            NSDictionary *infoDict = [NSBundle mainBundle].localizedInfoDictionary;
            if (!infoDict) {
                infoDict = [NSBundle mainBundle].infoDictionary;
            }
            NSString *appName = [infoDict valueForKey:@"CFBundleDisplayName"];
            if (!appName) appName = [infoDict valueForKey:@"CFBundleName"];
            NSString *tipText = [NSString stringWithFormat:[NSBundle tz_localizedStringForKey:@"Allow %@ to access your album in \"Settings -> Privacy -> Photos\""],appName];
            _tipLabel.text = tipText;
            [self.view addSubview:_tipLabel];
            
            if (iOS8Later) {
                _settingBtn = [UIButton buttonWithType:UIButtonTypeSystem];
                [_settingBtn setTitle:self.settingBtnTitleStr forState:UIControlStateNormal];
                _settingBtn.frame = CGRectMake(0, 180, self.view.tz_width, 44);
                _settingBtn.titleLabel.font = [UIFont systemFontOfSize:18];
                [_settingBtn addTarget:self action:@selector(settingBtnClick) forControlEvents:UIControlEventTouchUpInside];
                [self.view addSubview:_settingBtn];
            }
            //开启定时器
            _timer = [NSTimer scheduledTimerWithTimeInterval:0.2 target:self selector:@selector(observeAuthrizationStatusChange) userInfo:nil repeats:YES];
        } else {
            [self pushPhotoPickerVc];
        }

- (void)observeAuthrizationStatusChange {
    if ([[TZImageManager manager] authorizationStatusAuthorized]) {
        [_tipLabel removeFromSuperview];
        [_settingBtn removeFromSuperview];
        [_timer invalidate];
        _timer = nil;
        [self pushPhotoPickerVc];
    }
}

最后总结:打开相册不在需要用户授权,也就是说,默认对手机相册拥有读权限,因此在这里本人也就没有做处理,检查了手机上新更新的其他软件,如果只需要访问手机相册也都没有设置。等上线的时候看一下会不会被拒再来更新,如果已经有做过实验的小伙伴谢谢告诉我一声,不胜感激。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/190821.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • oracle启动时必须启动哪两个服务_富士康的领导

    oracle启动时必须启动哪两个服务_富士康的领导七个服务的含义分别为:1.OracleORCLVSSWriterService:Oracle卷映射拷贝写入服务,VSS(VolumeShadowCopyService)能够让存储基础设备(比如磁盘,阵列等)创建高保真的时间点映像,即映射拷贝(shadowcopy)。它可以在多卷或者单个卷上创建映射拷贝,同时不会影响到系统的系统能。(非必须启动)2.OracleDBConsole…

    2025年5月26日
    2
  • 彻底解决mysql中文乱码

    彻底解决mysql中文乱码mysql是我们项目中非常常用的数据型数据库。但是因为我们需要在数据库保存中文字符,所以经常遇到数据库乱码情况。下面就来介绍一下如何彻底解决数据库中文乱码情况。

    2022年5月11日
    39
  • html卷轴展开动画,Flash制作卷轴展开的动画

    html卷轴展开动画,Flash制作卷轴展开的动画推荐:Flash制作搞笑QQ表情动画副标题#e#QQ表情已经成为一种流行文化,聊天的时候我们经常会被一些搞怪的QQ表情逗得忍俊不禁。其实这些表情制作的方法并不难,只要掌握一些Flash的基本操作,我们就可以把自己的好创意也制作成表情。本实例来自我自己画的一套圆圆溜溜搞怪表情中的一个,下面是制作过北京奥运会开幕式上那充满诗意的卷轴,以及它所呈现给我们的一幅幅无法言喻的美妙画面,大家一定还记忆犹新吧…

    2022年5月22日
    36
  • 浅谈QEMU的对象系统

    浅谈QEMU的对象系统

    2021年7月7日
    103
  • struts2拦截器不执行问题「建议收藏」

    struts2拦截器不执行问题「建议收藏」struts2自定义拦截器的配置博文很多,但按一些文章中配置好自定义拦截器后,设置为默认拦截器栈,拦截器方法intercept()却未被调用的问题,原因多种,以下为我问题的解决方式:配置struts2.xml加上原来其他项目中同样的配置却没出现不能被执行的问题,xml配置都差不多,可能深层问题在于action中注解的各项配置引发,有空再验证。参考:http://struts

    2022年10月7日
    5
  • svn配置帐号密码「建议收藏」

    svn配置帐号密码「建议收藏」svn/config下authz:###Thisfileisanexampleauthorizationfileforsvnserve.###Itsformatisidenticaltothatofmod_authz_svnauthorization###files.###Asshownbeloweachsectiondefinesauth…

    2025年9月5日
    7

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号