【问题标题】:Check authorization of CMMotionActivityManager below iOS 11在iOS 11以下检查CMMotionActivityManager的授权
【发布时间】:2018-12-24 19:18:41
【问题描述】:

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

我很快发现这段代码确实有效,但只是在 iOS 11 之后。如你所见,我为 iOS 11 之前的版本留下了备用代码的 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
        }
    }

感谢任何帮助。

【问题讨论】:

    标签: ios swift xcode authorization privacy


    【解决方案1】:

    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
    }
    

    【讨论】:

    • } else { 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 } } } 产生错误“使用未解析的标识符'endDate';您的意思是'getdate'吗?”
    • 不,这只是我的示例中的两个占位符。您必须将 startDate 和 endDate 替换为您自己的两个日期。
    猜你喜欢
    • 2014-06-15
    • 1970-01-01
    • 1970-01-01
    • 2014-02-05
    • 1970-01-01
    • 1970-01-01
    • 2017-05-24
    • 2020-03-13
    • 2011-01-07
    相关资源
    最近更新 更多