我想获得CMMotionActivityManager
的授权状态。对于日历和位置等其他服务,我们在API中有一些属性,它们为我们提供了这些类的用户授权状态。我怎样才能获得CMMotionActivityManager
课程的授权状态?
答案 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()
})
}