CMMotionactivitymanager authorizationstatus

时间:2014-04-29 09:15:35

标签: ios iphone core-motion cmmotionmanager

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

4 个答案:

答案 0 :(得分:12)

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

iOS - is Motion Activity Enabled in Settings > Privacy > Motion Activity

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

进行查询
queryActivityStartingFromDate:toDate:toQueue:withHandler

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

CMErrorMotionActivityNotAuthorized

答案 1 :(得分:4)

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

答案 2 :(得分:3)

以下是我的表现:

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")
        }

})

答案 3 :(得分:2)

我不得不为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()
  }) 
}