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
用戶處置擺動手臂
- Attitude
Snip20160731_25.png
- Graity 重力感應
Snip20160731_26.png
- Rotation rate 旋轉角度
Snip20160731_28.png
- User Acceleration 用戶水平運動
Snip20160731_29.png
他們的使用場景 :
Snip20160731_27.png