在从 UIActivityController 拒绝保存图像的权限后,如何将用户重定向到设置?

Posted

技术标签:

【中文标题】在从 UIActivityController 拒绝保存图像的权限后,如何将用户重定向到设置?【英文标题】:How do you redirect user to settings after denying permissions for Save Image from UIActivityController? 【发布时间】:2019-07-17 00:09:50 【问题描述】:

用户在我的应用中拍照后,会显示一个 UIUserActivity,允许用户保存和图像。出现一个弹出窗口并请求允许将照片写入用户相册。但是,如果用户拒绝,则无法提示用户重定向到照片库。即使已经请求权限,phphoto 授权状态总是返回未确定。我正在寻找一些可以满足的东西:

    如果用户想要保存照片,他们应该能够拒绝,但会继续提示他们授予应用程序权限。

    如果用户拒绝,我希望“保存照片”选项保留在 UIUserActivity 中作为潜在选项

我怎样才能做到这一点?

我已尝试使用 PHPhotoLibrary 授权状态,但它始终返回未确定。我尝试检查 .undetermined 并使用 PHPhotoLibrary 请求访问用户的相机胶卷,但是如果用户此时拒绝,则保存照片的选项将从 UIUserActivity 弹出窗口中完全删除。

代码:

activityViewController.completionWithItemsHandler =  activity, success, items, error in
    if success 
        if let activity = activity 
        ...
        case .saveToCameraRoll:
           handleCameraRollPermission()
func handleCameraRollPermission(status: PHAuthorizationStatus? = nil, completion: @escaping ((Bool) -> Void)) 
        let authorizationStatus = status ?? PHPhotoLibrary.authorizationStatus()
        switch authorizationStatus 
        case .denied, .restricted:
            showPermissionMissingAlert(completion: completion)
        case .notDetermined:
            PHPhotoLibrary.requestAuthorization  (status) in
                switch(status) 
                case .denied, .restricted, .notDetermined:
                    self.showPermissionMissingAlert(completion: completion)
                default:
                    break
                
            
        default:
            completion(true)
        
    

【问题讨论】:

【参考方案1】:

这可能有点过头了,但您可以为 activityView 创建一个自定义操作部分。您可以找到更多关于 here 的信息并向下滚动到 Adding a custom action 部分。

基本上,您会制作一个自定义保存按钮,无论权限状态如何,该按钮都会持续存在。当它被点击时,您可以检查他们的授权状态并从那里开始。

【讨论】:

以上是关于在从 UIActivityController 拒绝保存图像的权限后,如何将用户重定向到设置?的主要内容,如果未能解决你的问题,请参考以下文章

更改 UIActivityController 的标题文本颜色

邮件 - 从 UIActivityController 添加帐户屏幕

根据选定的活动共享不同的内容 - UIActivityController

从 iOS 中的 UIActivityController 选项中删除注释

UIActivityController 分享 URL 文件

在 iPad 中呈现 UIActivityController 时应用程序崩溃