CMMotionActivityManager - 授权状态“刷新”

Posted

技术标签:

【中文标题】CMMotionActivityManager - 授权状态“刷新”【英文标题】:CMMotionActivityManager - authorizationStatus "refresh" 【发布时间】:2019-10-15 22:28:15 【问题描述】:

当在手机的“设置”>“隐私”>“运动与健身”中禁用“健身追踪”状态时,我正在检查 CMMotionActivityManager 的 authorizationStatus()。对于系统范围的限制,我得到了正确的“受限”状态。

当我启用“健身追踪”并将我的应用从后台返回到前台时,authorizationStatus() 仍然返回“受限”。如果我刷出/终止应用程序并重新启动,它会更改授权状态。

有没有办法在将应用程序从后台带到前台时刷新authorizationStatus()。

谢谢!

【问题讨论】:

否,在设置中更改授权状态不会导致应用崩溃。我必须手动终止应用程序才能重新启动。 在我看来(也可能是你的),如果用户从限制更改为授予并且您没有崩溃,并且当您再次询问授权状态时获得过时的信息,那是一个错误并且你应该报告它。但是,我要补充一点,您永远不应该只相信授权状态告诉您的内容;除非您通过尝试使用活动管理器“逗弄”系统,否则什么都不会发生。你在这样做吗? 换句话说,你应该开始更新或查询活动不管你从授权状态调用中​​得到什么结果。如果您未获得授权,则不会发生任何事情,也不会造成任何伤害。 (您将在完成处理程序上按顺序收到错误。) 谢谢,无论授权状态如何,我都尝试通过启动活动更新来“搔痒”。它仍然没有刷新状态。这似乎是一个错误。让我报告一下,看看苹果怎么说。谢谢! 只是确认我也看到了与 AG 相同的结果(状态不是“刷新”)。由于切换全局运动权限时应用程序不会崩溃,我想我将只显示一个对话框,告诉用户自己重新启动应用程序。当然,最好的用户体验将取决于实施/产品。 【参考方案1】:

我遇到了同样的问题,这种行为仅发生在用户向您的应用授予运动数据权限之前。一旦您的应用第一次授予权限,那么如果在设备级别切换动作权限,ios 将终止您的应用(但当且仅当您的应用在某个时候授予权限)。因此,一旦您授予权限,您的应用就会出现在动作权限列表中(见下图),如果是这样,iOS 将在切换开关时终止。

【讨论】:

以上是关于CMMotionActivityManager - 授权状态“刷新”的主要内容,如果未能解决你的问题,请参考以下文章

CMMotionActivityManager 无法检测汽车模式

启动 CMMotionActivityManager 给 SIGABRT

用户不允许权限时的CMMotionActivityManager回调

CMMotionActivityManager queryActivityStarting 数据在关闭之外不可用

Swift CMMotionActivityManager 未显示正确的授权状态

是否可以获取 iOS 用户当前的 healthkit 状态?