Swift.CMAuthorizationStatus CMAuthorizationStatus变化的监听器

问题描述 投票:3回答:1

是否有办法检测 CMAuthorizationStatus?

目前似乎只能通过调用例如 CMMotionActivityManager.authorizationStatus() 来获取状态。然而,我正在寻找一种方法,如果状态发生变化(或者用户在设置中禁用了Motion & Fitness权限),则通过监听器获取变化事件。

由于状态也只能通过函数获取,所以我无法对该值设置一个KVO。

期待您的帮助。

ios swift core-motion
1个回答
0
投票

我一直在努力解决同样的问题,我想在设置过程中请求一次授权,这样用户就不必在以后处理对话框,然后在每次应用程序被启动时检查权限。

为此,我写了下面的代码,首先检查是否已经设置了授权,否则启动一个调用,应该调用权限对话框。在这个调用中,我请求了从现在到现在的活动数据,理论上没有任何意义,但在权限对话框被驳回后,返回一个值或一个错误。

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中)调用这个方法,因为那(虽然不在你的应用程序中)是用户能够改变权限的唯一时间。

© www.soinside.com 2019 - 2024. All rights reserved.