ios - 照片库访问 .notDetermined,当拒绝然后启用

标签 ios swift

如果我一开始拒绝,然后转到设置并在设置中允许,在这两种情况下状态都是 notDetermined,而不是拒绝然后授权。 为什么会这样?

当我点击“不允许”时它不保存图像,但状态变为 .notDetermined 而不是 .denied 。
它保存,在我进入设置 ->照片后,取消选中“从不”并选中“仅添加照片”。但是状态保持.notDetermined,没有变成.authorized

func save(){
        guard let image = imageView.image else {return}
        UIImageWriteToSavedPhotosAlbum(image, self, nil, nil)

        let status = PHPhotoLibrary.authorizationStatus()

        switch status {

        case .authorized:
            print("authorized")
            return
        case .notDetermined:  
            print("not determined")
        case .denied, .restricted:
            print("denied or restricted")
            //please go to settings and allow access
            promptToSettings()
        }
    }

我正在请求将图像保存到照片库的权限。 当用户第一次尝试保存时,系统会询问他:“应用想要添加到照片”“不允许”“确定” 如果用户拒绝然后再次尝试保存,我想检查状态是否为.denied,提示用户转到设置并允许。 但是,当用户第一次未授予访问权限时,代码会转到 .notDetermined block 。即使在设置中用户允许访问后,它仍保持 .notDetermined。

最佳答案

我下载了你的代码并运行了它。我能够体验你所说的一切。它总是返回未确定状态。 我对你的代码做了进一步的分析。请在下面找到我的观察结果。

  1. 在您当前的代码中,在使用“PHPhotoLibrary.authorizationStatus”方法读取授权状态之前,不会调用“PHPhotoLibrary.requestAuthorization”方法。
  2. 虽然 Save 方法中的“UIImageWriteToSavedPhotosAlbum”会触发照片应用程序权限弹出窗口,但这对这里完全没有帮助。
  3. 因此,我在 ViewDidLoad 方法中调用了“askForAccessAgain”方法,以便首先使用“PHPhotoLibrary.requestAuthorization”方法获得权限。
  4. 之后,每当我使用 Save 方法保存照片时,它都会返回正确的状态,让它是“授权”或“拒绝”。
  5. 如果我选择“从不”和“仅允许照片”,它会返回“拒绝或限制”状态。选择“Read and Write”时,返回“authorized”。

所以,看起来,我们需要先调用“PHPhotoLibrary.requestAuthorization”方法来获取权限,而不是依赖其他照片访问方法(如 UIImageWriteToSavedPhotosAlbum)来获取权限。只有这样,“PHPhotoLibrary.authorizationStatus”才会返回正确的状态。

再补充一点: 即使在删除应用程序并重新安装后,应用程序权限仍会保留。也看看这个。它可能会帮助您在未来解决类似问题。 iPad remembering camera permissions after delete—how to clear?

如果这解决了您的问题,请告诉我。

关于ios - 照片库访问 .notDetermined,当拒绝然后启用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55397459/

相关文章:

ios - Alamofireimage 如何将图像保存到磁盘缓存?

ios - swift/alamofire/api token /缺少必需参数 : grant_type

ios - 如何在SKShapeNode内移动SKNode但禁止子节点离开父节点?

ios - 使用 Swift,如何禁止弹出键盘?

ios - 在 IOS 15 中单击推送通知时,React-native UI 无法正确呈现

ios - UIPanGesture 识别器仅向一个方向滑动

ios - 如何按值降序从 firebase 获取数据?

iphone - 确定 CGPoint 是否在图像区域内

swift - 如何准备 segue 并将数据从一个标签发送到另一个标签?

ios - 在 ScrollView 中加载的 View 大小不正确