WWDC2016-Health and Fitness with Core Motion

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方面

    • 优化力度也是显而易见的,如图
Snip20160731_7.png

分别在待机时间上面,处理数据的延迟度上面都有着提高。

  • 在iOS10以及watchOS3中,你在使用senorrecoder时,就不仅仅长期观察用户运动,可以写分到类别,例如监测用的体育活动,记录用户的健身运动情况,更可以辅助医学的健康诊断。
  • 当你带着apple watch 的时候,手臂。手腕的晃动。都可以试试的被监测到。通过用户的活动,可以准确的分析用户的运动行为,从而给出更加专业性的建议。

二、Pedometer events

  • 在说这个Pedometer event之前,我们还是要先了解下CMPedometer。
  • CMPedometer是非常丰富的API。 可以记录步数,距离,楼层等。通过它创建一个全天性的监测活动。你也可以为这些活动设置一些有趣的目标让用户去实现。
  • 现在CMPedometer,在用户锻炼方面也有出色的表现。
Snip20160731_8.png
Snip20160731_9.png
  • 例如:现在提供了运动速度指标(走路或者跑步)。不管GPS是否管用,都可以准确的记录用户的步数和运动距离。pedometer events (ios10 新增API)就是实现这个的关键。
Snip20160731_12.png
  • 这用用这个api设计一些健康运动的APP。


    Snip20160731_13.png
  • 我们来讨论下典型的运动锻炼类app。通常你会遇到一个问题那就是,在记录用户运动情况的时候,用户在过马路时出现等红绿灯情况。此时你如何计算定义用户开始与停止走路的状态。

  • pedometer event 可以做到 智能预测停止和继续;计算准确的距离和速度;GPS不适用的情况

  • 实现原理:API为了保持数据的精确性,更加低能耗。通过分析用户运动数据的预测算法实现。我们需要指出的是这个预测算法会持续监测用户运动情况。会准确地告知你 是否暂停或者继续的事件。

  • 通过预测算法和实时更新监测状态,来保证数据的准确性

下图是Pedometer event 的使用设备范围

iphon6/6+都不支持

Snip20160731_15.png

部分代码展示

@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

Snip20160731_24.png
  • 自从ios5 就出现了device motion,所有iOS系统都是支持的,现在watchOS3 中我们也将这部分移植了。
  • 在watchOS3中关于Device Motion 的主要有四个API
    • Attitude
      用户处置摆动手臂
Snip20160731_25.png
  • Graity 重力感应
Snip20160731_26.png
  • Rotation rate 旋转角度
Snip20160731_28.png
  • User Acceleration 用户水平运动
Snip20160731_29.png

他们的使用场景 :

Snip20160731_27.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容