在iOS 11下检查CMMotionActivityManager的授权

时间:2018-12-21 06:15:51

标签: ios swift xcode authorization privacy

我编写了这段代码,该代码检查CMMotionActivityManager的授权状态,以及用户是否允许我的应用访问它。

我很快发现该代码实际上是有效的,但仅在iOS 11之后才起作用。如您所见,我为iOS 11之前的版本留下了一个fallback代码的else语句。有人知道我可以实现相同的过程吗? iOS 11以下的版本,然后在else语句中使用该功能?我在网上找不到很多东西。

   private func checkAuthorizationStatus() {
        if #available(iOS 11.0, *) {
            switch CMMotionActivityManager.authorizationStatus() {
            case CMAuthorizationStatus.denied:
                onStop()
                // no authorization
            default:break
            }
        } else {
            // Fallback code for < iOS 11
        }
    }

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

在iOS 11以下的iOS版本中,无法检查授权状态。

对于iOS 10及以下版本,您可以简单地查询活动。如果该应用无权检索存储的运动数据,则会收到一个特定的错误,您可以检查该错误:

// get last 10 days of activity
let endDate = Date()
let startDate = endDate.addingTimeInterval(-60 * 60 * 24 * 10)
let manager = CMMotionActivityManager()
manager.queryActivityStarting(from: startDate, to: endDate, to: .main) { (activities, error) in
    if let error = error, (error as NSError).code == CMErrorMotionActivityNotAuthorized.rawValue {
        // not autorized!
        return
    }
    // do something with the activities
}