是否可以检测到CMAuthorizationStatus
的变化?
目前似乎只能致电例如CMMotionActivityManager.authorizationStatus()
获取状态。但是,我正在寻找一种方法来通过状态改变(或用户在设置中禁用/启用了运动和健身权限)通过侦听器获取更改事件。
由于状态也只能通过函数获取,因此我无法在该值上设置KVO。
期待您的帮助。
答案 0 :(得分:1)
我一直在同一个问题上挣扎,我想在设置过程中一次请求授权,因此用户不必以后再处理该对话框,然后在每次启动该应用程序时检查权限。
为此,我编写了以下代码,首先检查是否已设置授权,然后启动应调用权限对话框的调用。在此调用中,我请求从现在到现在的活动数据,理论上这没有任何意义,但是在取消权限对话框后返回一个值或错误。
func checkMotionPermission(closure: @escaping (Bool) -> Void) {
switch CMMotionActivityManager.authorizationStatus() {
case .authorized:
closure(true)
case .notDetermined:
let activityManager = CMMotionActivityManager()
activityManager.queryActivityStarting(from: Date(), to: Date(), to: .main) { (activity, error) in
let auth = CMPedometer.authorizationStatus()
switch auth {
case .authorized:
closure(true)
default:
closure(false)
}
}
default:
closure(false)
}
}
要更改权限状态,您可以在应用程序每次进入前台(在AppDelegate中)时调用此方法,因为那是(只有不在您的应用程序中)用户才可以更改许可。