如果我一开始拒绝,然后转到设置并在设置中允许,在这两种情况下状态都是 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。
最佳答案
我下载了你的代码并运行了它。我能够体验你所说的一切。它总是返回未确定状态。 我对你的代码做了进一步的分析。请在下面找到我的观察结果。
- 在您当前的代码中,在使用“PHPhotoLibrary.authorizationStatus”方法读取授权状态之前,不会调用“PHPhotoLibrary.requestAuthorization”方法。
- 虽然 Save 方法中的“UIImageWriteToSavedPhotosAlbum”会触发照片应用程序权限弹出窗口,但这对这里完全没有帮助。
- 因此,我在 ViewDidLoad 方法中调用了“askForAccessAgain”方法,以便首先使用“PHPhotoLibrary.requestAuthorization”方法获得权限。
- 之后,每当我使用 Save 方法保存照片时,它都会返回正确的状态,让它是“授权”或“拒绝”。
- 如果我选择“从不”和“仅允许照片”,它会返回“拒绝或限制”状态。选择“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/