【问题标题】:How to detect changes to PHAuthorizationStatus?如何检测 PHAuthorizationStatus 的更改?
【发布时间】:2014-09-01 18:54:55
【问题描述】:

我需要检测我的应用在 iOS 8 上使用 PhotoKit 访问照片的权限的更改。我可以使用 PHPhotoLibrary.authorizationStatus() 获取状态,但我需要知道此状态何时更改,以便我可以更新 UI(即要求他们更改权限)。

如果用户启动应用程序,我会检查viewDidLoad 中的authorizationStatus,如果状态为.Denied 或.Restricted,则显示消息。但是,如果用户随后转到设置并授予访问权限,当他们返回应用程序时,它仍会显示该消息。我需要处理这些状态更改 - 如果它更改为 .Authorized 我需要删除消息并重新加载我的集合视图。

我找不到任何可以订阅的通知。如何做到这一点?

【问题讨论】:

    标签: ios nsnotificationcenter photos


    【解决方案1】:

    每当您尝试使用 PhotoKit 时,您都可以简单地检查空的 PHFetchResult 对象。

    这是因为,如果用户拒绝了您的应用照片库访问、尚未响应权限提示或由于限制而无法授予访问权限,则任何获取照片库内容的尝试都将返回空的 PHFetchResult 对象。

    Apple 建议您使用registerChangeObserver:,因为

    ...在用户为您的应用授予对照片库的访问权限后,“照片”会针对您事先检索到的任何空提取结果发送更改消息,通知您这些提取的库内容现在可用。

    您可以在这里PhotoKit documentation了解更多信息。

    【讨论】:

    • 这行得通,但您不知道他们是否拒绝访问,或者他们的设备是否限制了访问,并且他们无法自行启用它。对于这两种情况,最好向用户显示不同的消息。
    【解决方案2】:

    我发现当我在真实设备上运行应用程序而不是在模拟器中调试时,当用户更改照片访问权限时,应用程序似乎被终止,因为当他们返回应用程序时,它并没有从他们的位置恢复以前。因为我在viewDidLoad 中为第一个视图控制器请求授权,所以它可以正确处理拒绝/限制状态。

    请注意,如果您在测试时在模拟器中调试应用程序,它不会终止它。但是如果你停止运行应用程序然后尝试它,它会终止它。

    【讨论】:

    • 对。在设置应用中更改 PHAuthorizationStatus 后,应用会在真机上重新启动。
    • 现在有没有人想出如何通过 iOS 9+ 上的深度链接来处理这个问题?当我设置照片权限并通过iOS状态栏中的返回按钮返回应用程序时,应用程序崩溃。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-24
    • 2016-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-30
    • 1970-01-01
    相关资源
    最近更新 更多