我正在开发一个利用Core Motion的应用。在应用的初始化过程中,它会询问用户的权限,而我们基本上想根据该弹出窗口的响应(AllowedDenied)来更新UI。对于通知和位置服务来说,这似乎很容易做到,但Core Motion并不像存在一个请求权限的API,相反,它只是在开始更新管理器时触发弹出窗口,就像我们现在做的那样。
let motionManager = CMMotionActivityManager()
motionManager.startActivityUpdates(to: OperationQueue.main) {
// do stuff
}
理想情况下,我希望能够检测到CMMotionActivityManager.authorizationStatus()的变化,但是到目前为止,除了实现一个定时器来检查这个属性之外,我还没有找到一个有效的解决方案,我觉得这不是一个特别好的解决方案。
我试着用Combine把authorizationStatus()或整个管理器变成一个可观察的对象,但似乎没有触发任何更新。
如果用户拒绝了权限,那么她就不能再授予权限,而不去设置应用。所以你不需要在定时器上检查。在应用程序启动时和通知时进行检查就足够了。applicationWillEnterForeground
和 didBecomeActiveNotification
.