iOS8からCMStepCounterがCMPedometerになってた話

つみきでアプリエンジニアをしている野田です。

以前、このブログで「iPhoneで歩数計アプリを作れる!M7について調べてみた。」という記事でiOS7から歩数計としてCMStepCounterが追加されたと書きました。しかし、iOS8からDeprecatedになり、かわりにCMPedometerが追加されていました。

そこで今回はこのCMPedometerについて変更点を踏まえ紹介したいと思います。

CMPedometer

このクラスには

  • +isStepCountingAvailable
  • +isDistanceAvailable
  • +isFloorCountingAvailable
  • -startPedometerUpdatesFromDate:withHandler:
  • -stopPedometerUpdates
  • -queryPedometerDataFromDate:toDate:withHandler:

という6つのメソッドがあります。
これらのメソッドは大きく判定、測定メソッドに分ける事ができます。

判定

isStepCountingAvailable

このメソッドでCMStepCounterと同様、CMPedometer利用可能か判定します。

isDistanceAvailable

新たに追加されました。距離推定が利用可能か判定します。

isFloorCountingAvailable

こちらも新たに追加されました。フロア数の計測が利用可能か判定します。

測定

startPedometerUpdatesFromDate:withHandler:

このメソッドによってリアルタイム計測を行います。
第1引数はどの時点からデータを取得するかNSDate型で指示できるようになっています。
第2引数のhandlerでは

  1. 計測データ(pedometerData *pedometerData)、
  2. エラー内容(NSError *error)

を取得することができます。

このhandlerは新しいデータが追加されるとバックグラウンドスレッドで繰り返し呼ばれるようになっています。 CMStepCounterとの大きな違いは過去の時間を指定できるようになったこと、計測データをpedometerDataとしてまとめて取得できるようになったことではないでしょうか。
pedometerDataについては最後に説明します。

stopStepCountingUpdates

上記の計測を停止するメソッドです。 計測する必要がなくなった時に呼び出します。
これら2つのメソッドを組み合わせ、リアルタイムな歩数計測を行います。

queryPedometerDataFromDate:toDate:withHandler:

任意の期間の計測データの集計ができます。
第1引数が取得開始時刻、
第2引数が終了時刻をそれぞれNSDate型で指定します。
第3引数のhandlerでは先ほどと同じように

  1. 計測データ(pedometerData *pedometerData)
  2. エラー内容(NSError *error)

を取得できます。

こちらは、CMStepCounterとほとんど同じように使用することができると思います。

pedometerDataについて

CMPedometerでは計測データをpedometerDataとして受け取ることができます。 pedometerDataで受け取れる内容は

  • 集計開始時間(NSDate *startDate)
  • 集計終了時間(NSDate *endDate)
  • 歩数(NSNumber *numberOfSteps)
  • 推定距離(NSNumber *distance)
  • 上ったフロアの数(NSNumber *floorsAscended)
  • 降りたフロアの数(NSNumber *floorsDescended)

と、CMStepCounterと違い推定距離やフロアの移動の情報も取得できるようになっています。
ちなみに、エレベータ等を使用するとフロア数はうまくとれないようです。

まとめ

今回は、iOS8で追加されたCMPedometerについて紹介しました。
iOS7であったCMStepCounterよりもさらに多くの情報を取得できるようになりました。 フロア数などのデータも取得できるようになったので、このあたりのデータをうまく使ったゲームアプリなんか作ってみたいなと思っています!

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

お問い合わせ