Skip to content

Instantly share code, notes, and snippets.

@yatatsu
Last active July 30, 2018 03:52
Show Gist options
  • Save yatatsu/51db005c96e09a1cb065 to your computer and use it in GitHub Desktop.
Save yatatsu/51db005c96e09a1cb065 to your computer and use it in GitHub Desktop.
pedometer

スマートフォンの歩数計測について

2014-08-05更新

歩数計とは

  • 移動速度, 加速度センサーなどから歩数を計測.
  • GPSやwifiの位置情報から移動距離を計測.
  • 車など他の移動手段や消費カロリーなどの計測をするものもある.
  • 万歩計は登録商標.

iPhone

CoreMotionFramework

CMMotionManager

  • iOS4以降
  • 加速度センサのデータを計測, 取得できる.
  • 自力で歩数を計測する.

CMStepCounter

  • iOS7以降
  • ただしデータを取得できる端末は一部. 今のところiPhone5sしか利用できない.(M7がないとだめ)
  • iOSが計測している歩数を取得できる. (保存は過去1週間分)
  • 移動を監視し, 歩数カウントが更新されたタイミングでイベント取得.

cf. CMStepCounter Class Reference

cf. [iOS 7 SDK] Core Motion Framework の CMStepCounter と M7 | hirooka.pro

CMMotionActivityManager

  • CMStepCounterと同様, iPhone5sのみ.
  • ユーザの移動に関する情報を管理する.
  • CMMotionActivityのプロパティには以下の種類がある
    • stationary(静止)
    • walking(歩行)
    • running(走行)
    • automotive(乗り物移動)
    • unknown(不明)
  • 任意の期間の移動状態を計測し取得できる.
  • 移動距離などの位置情報は取得できない. (Locationで取得する)

cf. CMMotionActivityManager Class Reference

cf. M7 と少しだけ戯れてみた - griffin-stewieのブログ

HealthKit

  • iOS8以降
  • iOS8にはHealth.appがプリインストールされている
  • 健康に関する様々なデータ(血糖値, 消費カロリー, 歩数, 心拍数etc.)を管理.

できること

  • HealthKitの提供するAPIを使うことでデータを読み書き.(アプリごとに権限を許可する.)
  • データの統計(平均, 最大値, 最小値)を取得できる.
  • データにはどのアプリから登録されたかを判別するプロパティがある.

特徴

  • データアクセスは非同期で扱う.
  • データの種類が決まっている. (種類, 単位などが定められている代わり, シンプルに扱える)
  • アプリ間のデータ共有ができる.

歩数計測

  • 以下のデータタイプがある(iOS8 beta5時点)
    • HKQuantityTypeIdentifierStepCount
    • HKQuantityTypeIdentifierDistance

cf. HealthKit.framework概要

Android

Step Detector & Step Counter

  • Android4.4(KitKat)
  • 歩数の検出とイベントの発生
  • 歩数の計測自体はハード側で実装されたセンサーをもとにうまいことやってくれる.
    • (2014/08時点でNexus5のみ)

cf. Android 4.4 KitKat - sos の 作業メモ

cf. https://source.android.com/devices/sensors/composite_sensors.html

cf. Mike's Projects | Android 4.4 – KitKat – Step detector code

加速度センサーで自力計測

  • Android4.3以下はiOS7未満同様, 自力で加速度センサー使って計測

Activity Recognition

  • GooglePlay servicesに含まれるので, 古いバージョンでも利用可能.
  • ユーザの行動を取得する.
  • GPSの位置情報があるとより正確な判定になる.

内容

  • 行動状態はDetectedActivityで取得する.
  • getConfidence()で正確さ, getType()で行動の種類を取得できる.
    • IN_VEHICLE(乗車中)
    • IN_BICYCLE(自転車)
    • ON_FOOT(歩行または走行)
    • RUNNING(走行)
    • STILL(待機)
    • TILTING(回転)
    • UNKNOWN(不明)
    • WALKING(歩行)
  • 移動距離などは別に取得する必要がある.

cf. Android x Google Play Services #5 Location API でユーザーの行動を取得する | Developers.IO

cf. DetectedActivity | Android Developers

GoogleFit

  • 2014秋発表?
  • デバイス間, アプリ間でのデータ共有.

cf. Google Fit 発表。複数デバイスやアプリからフィットネス情報を集約管理 - Engadget Japanese

まとめ

2014/08現時点でのまとめ

iOS

歩数計測

  • iPhone5s: CMStepCounterを使って比較的容易に取得できる
  • Other: 自力で加速度センサーを用いてロジックを作る
  • ライブラリ: 確認できず; 加速度センサーを用いた実装例: pdetagyos/Pedometer

行動状態

移動距離

  • 位置情報(CoreLocation)を使って測定.

その他

  • iOS8以降はHealthKitを使うことでアプリ間のデータ共有が容易.

Android

歩数計測

行動状態

  • Activity Recognitionを利用して取得

移動距離

  • 位置情報を使って測定

その他

  • GoogleFitSDKは詳細不明
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment