【问题标题】:CMMotionactivitymanager authorizationstatusCMMotionactivitymanager授权状态
【发布时间】:2014-06-15 03:25:54
【问题描述】:

我想获取CMMotionActivityManager 的授权状态。对于日历和位置等其他服务,我们在 API 中有一些属性可以为我们提供这些类的用户授权状态。如何获取CMMotionActivityManager 类的授权状态?

【问题讨论】:

标签: ios iphone core-motion cmmotionmanager


【解决方案1】:

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

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

但是,正如上述问题中的 cmets 所述,如果您尝试使用查询

queryActivityStartingFromDate:toDate:toQueue:withHandler

如果用户没有授权你的应用,处理程序(CMMotionActivityQueryHandler)会返回这个错误。

CMErrorMotionActivityNotAuthorized

【讨论】:

  • 这会弹出警报
【解决方案2】:

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

【讨论】:

  • 绝对!谢谢。
【解决方案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")
        }

})

【讨论】:

  • 好的孩子们,记得添加 manager.stopActivityUpdates() 到处理程序。 :)
  • 好收获!谢谢
  • @CodeReaper 我认为没有必要,是吗? manager.startActivityUpdates(to:withHandler:) 尚未被调用。 manager.queryActivityStarting(from:to:to:withHandler:) 是对运动数据的一次性请求,不会持续更新。
【解决方案4】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-01
    • 1970-01-01
    • 2012-07-07
    • 2016-07-11
    • 2020-08-12
    相关资源
    最近更新 更多