拒绝然后启用

时间:2019-03-28 12:19:01

标签: ios swift

如果我首先拒绝,则转到设置并允许设置,在两种情况下,状态均为不确定,而不是拒绝然后授权。 为什么会这样?

当我单击“不允许”时,它不会保存图像,但是状态变为.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块。即使在设置允许用户访问后,它仍保持.not确定。

1 个答案:

答案 0 :(得分:2)

我下载了您的代码并运行了它。无论您说什么,我都能体会。它始终返回“不确定”状态。 我对您的代码做了进一步的分析。请在下面找到我的观察结果。

  1. 在当前代码中,在使用“ PHPhotoLibrary.authorizationStatus”方法读取授权状态之前,不会调用“ PHPhotoLibrary.requestAuthorization”方法。
  2. 尽管Save方法中的“ UIImageWriteToSavedPhotosAlbum”会触发弹出的“照片”应用权限,但这在这里完全无济于事。
  3. 因此,我首先在ViewDidLoad方法中调用了“ askForAccessAgain”方法,以便首先使用“ PHPhotoLibrary.requestAuthorization”方法获得许可。
  4. 此后,每当我使用Save方法保存照片时,它都会返回正确的状态,将其设置为“已授权”或“已拒绝”。
  5. 如果我选择“从不”和“仅允许照片”,它将返回“拒绝或限制”状态。选择“读取和写入”后,将返回“授权”。

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

另外一个附加信息: 即使删除并重新安装应用程序,其应用程序权限也会保留。只要看看这个。将来可能会帮助您解决类似问题。 iPad remembering camera permissions after delete—how to clear?

请告诉我这是否解决了您的问题。