Health and Fitness with Core Motion
session 713
这次主要包含一下3个方面的内容:
- Historical Accelerometer
- Pedometer events
- Device Motion on apple watch
在Core Motion 运动处理API自从iOS4开始就已经存在了。这部分相关的API介绍呢?请参照WWDC2011,WWDC2012的相关内容。
一、Historical Accelerometer
在WWDC2015时,我们更新一个API,名称是CM Sensor Recoder API。
-
iOS方面
- 这个api主要作用就是持续不断的获取你的设备的加速度信息。并且它是低能耗的。
- CM Sensor Recoder 主要是和传感器直接交互,便于直接检索和处理运动数据。
- 即使是当你的应用处于不活跃状态时,recoder 仍可以继续处理运动数据。
- 当你的应用需要使用运动数据是,可以直接通过recoder 进行获取。
-
WatchOS方面
- 优化力度也是显而易见的,如图
分别在待机时间上面,处理数据的延迟度上面都有着提高。
- 在iOS10以及watchOS3中,你在使用senorrecoder时,就不仅仅长期观察用户运动,可以写分到类别,例如监测用的体育活动,记录用户的健身运动情况,更可以辅助医学的健康诊断。
- 当你带着apple watch 的时候,手臂。手腕的晃动。都可以试试的被监测到。通过用户的活动,可以准确的分析用户的运动行为,从而给出更加专业性的建议。
二、Pedometer events
- 在说这个Pedometer event之前,我们还是要先了解下CMPedometer。
- CMPedometer是非常丰富的API。 可以记录步数,距离,楼层等。通过它创建一个全天性的监测活动。你也可以为这些活动设置一些有趣的目标让用户去实现。
- 现在CMPedometer,在用户锻炼方面也有出色的表现。
- 例如:现在提供了运动速度指标(走路或者跑步)。不管GPS是否管用,都可以准确的记录用户的步数和运动距离。
pedometer events
(ios10 新增API
)就是实现这个的关键。
-
这用用这个api设计一些健康运动的APP。
我们来讨论下典型的运动锻炼类app。通常你会遇到一个问题那就是,在记录用户运动情况的时候,用户在过马路时出现等红绿灯情况。此时你如何计算定义用户开始与停止走路的状态。
pedometer event 可以做到 智能预测停止和继续;计算准确的距离和速度;GPS不适用的情况
实现原理
:API为了保持数据的精确性,更加低能耗。通过分析用户运动数据的预测算法实现。我们需要指出的是这个预测算法会持续监测用户运动情况。会准确地告知你 是否暂停或者继续的事件。通过预测算法和实时更新监测状态,来保证数据的准确性
下图是Pedometer event 的使用设备范围
iphon6/6+都不支持
部分代码展示
@interface ViewController ()
@property (nonatomic, assign) CGFloat relaticeAltitudeNow;
@property (nonatomic, assign) CGFloat relaticeAltitudeAtResume;
@property (nonatomic, strong) CMPedometer * eventManager;
@property (nonatomic, strong) CMAltimeter * elevationManager;
@property (nonatomic, strong) NSOperationQueue * queue;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
self.eventManager = [[CMPedometer alloc]init];
self.elevationManager = [[CMAltimeter alloc]init];
self.relaticeAltitudeNow = 0.0;
self.relaticeAltitudeAtResume = 0.0;
self.queue = [NSOperationQueue currentQueue];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (void)startMyTrail {
if ([CMPedometer isPedometerEventTrackingAvailable]) {
[self.elevationManager startRelativeAltitudeUpdatesToQueue:self.queue withHandler:^(CMAltitudeData * _Nullable altitudeData, NSError * _Nullable error) {
self.relaticeAltitudeNow = [altitudeData.relativeAltitude doubleValue];
}];
}
if ([CMPedometer isPedometerEventTrackingAvailable]) {
[self.eventManager startPedometerEventUpdatesWithHandler:^(CMPedometerEvent * _Nullable pedometerEvent, NSError * _Nullable error) {
if (pedometerEvent.type == CMPedometerEventTypeResume) {
self.relaticeAltitudeAtResume = self.relaticeAltitudeNow;
}else if (pedometerEvent.type == CMPedometerEventTypePause) {
if (self.relaticeAltitudeNow - self.relaticeAltitudeAtResume > 0.0 ) {
}else if (self.relaticeAltitudeNow - self.relaticeAltitudeAtResume <0.0) {
}
}
}];
}
}
- (void)stopTrail {
[self.eventManager stopPedometerEventUpdates];
[self.elevationManager stopRelativeAltitudeUpdates];
}
三、Device Motion on apple watch
- 自从ios5 就出现了device motion,所有iOS系统都是支持的,现在watchOS3 中我们也将这部分移植了。
- 在watchOS3中关于Device Motion 的主要有四个API
- Attitude
用户处置摆动手臂
- Attitude
- Graity 重力感应
- Rotation rate 旋转角度
- User Acceleration 用户水平运动
他们的使用场景 :