我编写了这段代码,该代码检查CMMotionActivityManager的授权状态,以及用户是否允许我的应用访问它。
我很快发现该代码实际上是有效的,但仅在iOS 11之后才起作用。如您所见,我为iOS 11之前的版本留下了一个fallback代码的else语句。有人知道我可以实现相同的过程吗? iOS 11以下的版本,然后在else语句中使用该功能?我在网上找不到很多东西。
private func checkAuthorizationStatus() {
if #available(iOS 11.0, *) {
switch CMMotionActivityManager.authorizationStatus() {
case CMAuthorizationStatus.denied:
onStop()
// no authorization
default:break
}
} else {
// Fallback code for < iOS 11
}
}
感谢您的帮助。
答案 0 :(得分:0)
在iOS 11以下的iOS版本中,无法检查授权状态。
对于iOS 10及以下版本,您可以简单地查询活动。如果该应用无权检索存储的运动数据,则会收到一个特定的错误,您可以检查该错误:
// get last 10 days of activity
let endDate = Date()
let startDate = endDate.addingTimeInterval(-60 * 60 * 24 * 10)
let manager = CMMotionActivityManager()
manager.queryActivityStarting(from: startDate, to: endDate, to: .main) { (activities, error) in
if let error = error, (error as NSError).code == CMErrorMotionActivityNotAuthorized.rawValue {
// not autorized!
return
}
// do something with the activities
}