6

我想获得CMMotionActivityManager. 对于日历和位置等其他服务,我们在 API 中有一些属性,可以为我们提供这些类的用户授权状态。我怎样才能获得CMMotionActivityManager课程的授权状态?

4

4 回答 4

12

CMMotionActivityManager 目前不提供像其他框架一样直接检查授权状态的方法。

iOS - 在设置 > 隐私 > 运动活动中启用运动活动

但是,正如上述问题中的评论所述,如果您尝试使用

queryActivityStartingFromDate:toDate:toQueue:withHandler

并且用户尚未授权您的应用程序,处理程序(CMMotionActivityQueryHandler)将返回此错误。

CMErrorMotionActivityNotAuthorized
于 2014-05-03T01:56:16.457 回答
7

随着 IOS 11.* 的引入,可以调用 CMMotionActivityManager.authorizationStatus() 来为您提供详细状态。

于 2018-04-04T14:20:10.007 回答
4

这是我的做法:

manager = CMMotionActivityManager()

let today = NSDate()

manager.queryActivityStartingFromDate(today, toDate: today, toQueue: NSOperationQueue.mainQueue(),
    withHandler: { (activities: [CMMotionActivity]?, error: NSError?) -> Void in

        if let error = error where error.code == Int(CMErrorMotionActivityNotAuthorized.rawValue){
            print("NotAuthorized")
        }else {
            print("Authorized")
        }

})
于 2016-02-12T02:05:38.313 回答
3

我不得不为 Swift 3.0 稍微调整 Zakaria 的答案,而且新的 Error 也产生了问题,所以我不得不将它转换回 NSError 来获取代码,但这就是我的函数现在的样子。谢谢!

func triggerActivityPermissionRequest() {
  let manager = CMMotionActivityManager()
  let today = Date()

  manager.queryActivityStarting(from: today, to: today, to: OperationQueue.main, withHandler: { (activities: [CMMotionActivity]?, error: Error?) -> () in
    if error != nil {
      let errorCode = (error! as NSError).code
      if errorCode == Int(CMErrorMotionActivityNotAuthorized.rawValue) {
        print("NotAuthorized")
      }
    } else {
    print("Authorized")
  }
  manager.stopActivityUpdates()
  }) 
}
于 2017-12-21T01:31:25.190 回答