我想获得CMMotionActivityManager
. 对于日历和位置等其他服务,我们在 API 中有一些属性,可以为我们提供这些类的用户授权状态。我怎样才能获得CMMotionActivityManager
课程的授权状态?
问问题
5344 次
4 回答
12
CMMotionActivityManager 目前不提供像其他框架一样直接检查授权状态的方法。
但是,正如上述问题中的评论所述,如果您尝试使用
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 回答