iPhoneで歩数計アプリを作れる!M7について調べてみた。

つみきでアプリエンジニアをしている野田です。 iPhone6がもうすぐ発売になりますが、 実はiPhone5sから導入されているM7コプロセッサについてどんなことができるか調べてみたので紹介したいと思います。

M7コプロセッサとは

iPhone5sから内蔵されているCPUを補助する副処理プロセッサです。 このコプロセッサは加速度センサー・ジャイロスコープ・電子コンパスと連携しています。 そのため、このコプロセッサを使うことでメインプロセッサにあまり負荷をかけずにこれらの情報を常に処理することができるようになります。

M7を使うと

上で述べたようなことをCPU負荷をかけずに処理できるために、M7を使うと常時iPhoneの動きをチェックし、そこからユーザーの歩いた歩数を測定したり、「止まっている・走っている・運転している」等の状態を識別することができます。 このため、iphone5sでは静止時にはwi-fiとの接続を減らすなどしてバッテリー消費を減らすといったことも行っています。 また、このM7で収集されたデータはCoreMotion frameworkによって開発者が利用することができます。
これによりユーザーの活動計測アプリや、歩数計アプリなどを簡単につくることが可能になります。

CoreMotion frameworkでなにができるか?

M7用にiOS7からはCMStepCounter,CMMotionActivityManager,CMMotionActivityというクラスが新たに追加されています。
CMStepCounterは歩数計のようにユーザーの歩数を測定できるものです。
CMMotionActivityManager,CMMotionActivityこれらはユーザーの移動に関する情報を取得できます。

この中でも、今回はCMStepCounterを使ってどのように歩数を計測できるか、簡単に紹介してみたいと思います。

CMStepCounter

このクラスには

  • isStepCountingAvailable
  • startStepCountingUpdatesToQueue:updateOn:withHandler:
  • stopStepCountingUpdates
  • queryStepCountStartingFrom:to:toQueue:withHandler:

という4つのメソッドがあります。

それぞれについて説明すると

isStepCountingAvailable

このメソッドでCMStepCounterが利用可能か判定します。

startStepCountingUpdatesToQueue:updateOn:withHandler:

このメソッドによってリアルタイムな歩数計測を開始します。
第1引数は第3引数であるhandlerのblockをどのQueueで行うかを指定するものです。
第2引数はhandlerを何歩ごとに呼び出すか指定するものです。
第3引数のhandler blockには

  1. 計測開始からの累計歩数(NSInteger numberOfSteps)、
  2. 更新時タイムスタンプ(NSDate *timestamp)、
  3. エラー内容(NSError *error)

が入っています。

stopStepCountingUpdates

上記の計測を停止するメソッドです。 計測する必要がなくなった時に呼び出します。

これら2つのメソッドを組み合わせると実際に歩きながらその歩数を計測するような実装を行うことができます。

queryStepCountStartingFrom:to:toQueue:withHandler:

任意の期間の歩数の集計ができます。
第1引数が取得開始時刻、
第2引数が終了時刻をそれぞれNSDate型で指定します。
第3引数はhandlerのblockをどのQueueで行うかを指定します。
第4引数のhandlerでは

  1. 累計歩数(NSInteger numberOfSteps)
  2. エラー内容(NSError *error)

が入っています。
指定する期間は最大で7日前までとなっていますので、そこだけ実装時に注意が必要かもしれません。

このメソッドを使えば毎日の歩数を集計、表示するような実装を行うことができます。

CMStepCounterはこのようにシンプルな4つのメソッドしかありません。そのため比較的簡単にリアルタイムな歩数計測、任意の期間の歩数集計機能を実装することができます。

まとめ

今回は、M7でできること、歩数測定機能を使えるCMStepCounterについて説明しました。 今後はiOS8やApple Watchなどでさらにこのような健康管理を行う機能がどんどん増えていくと思います。 自分もそんな機能を使った面白いアプリを作ってみたいです。
CMMotionActivityManager,CMMotionActivityについてもどこかで触れる予定です!

スマホアプリ制作、Web制作、UIコンサルなどのご依頼はこちら

お問い合わせ