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
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容