1 CMMotionActivityManager介绍
活动器 CMMotionActivityManager 是 CoreMotion 框架中的一个功能类,主要用于检查用户当前的活动状态。
总共可以检测到 5 种状态:静止、步行、跑步、自行车、驾车。
同时每次返回结果时,都会附带本次结果准确程度的描述,共有:低 、中 、高三个等级。
2 使用样例
(1)程序启动后先判断设备是否支持活动器(需要5S或以后的设备)。
(2)如果支持的话则实时获取当前的运动状态以及精确度。并将这些数据不断更新到界面上。

3 样例实现
(1)由于安全限制,首先我们要在 info.plist 文件中加入访问用户健康和运动信息的相关描述。

(2)样例代码
import UIKit
import CoreMotion
class ViewController: UIViewController {
//用于显示实时信息
@IBOutlet weak var textView: UITextView!
//活动器对象
let motionActivityManager = CMMotionActivityManager()
override func viewDidLoad() {
super.viewDidLoad()
//开始获取活动状态
startActivityUpdates()
}
// 开始获取活动器数据
func startActivityUpdates() {
//判断设备支持情况
guard CMMotionActivityManager.isActivityAvailable() else {
self.textView.text = "\n当前设备不支持获取当前运动状态\n"
return
}
//初始化并开始实时获取数据
let queue = OperationQueue.current
self.motionActivityManager.startActivityUpdates(to: queue!, withHandler: {
activity in
//获取各个数据
var text = "---活动器数据---\n"
text += "当前状态: \(activity!.getDescription())\n"
if (activity!.confidence == .low) {
text += "准确度: 低\n"
} else if (activity!.confidence == .medium) {
text += "准确度: 低\n"
} else if (activity!.confidence == .high) {
text += "准确度: 高\n"
}
self.textView.text = text
})
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}
extension CMMotionActivity {
/// 获取用户设备当前所处环境的描述
func getDescription() -> String {
if self.stationary {
return "静止"
} else if self.walking {
return "步行"
} else if self.running {
return "跑步"
} else if self.automotive {
return "驾车"
}else if self.cycling {
return "自行车"
}
return "未知"
}
}