2014-08-05更新
- 移動速度, 加速度センサーなどから歩数を計測.
- GPSやwifiの位置情報から移動距離を計測.
- 車など他の移動手段や消費カロリーなどの計測をするものもある.
- 万歩計は登録商標.
- iOS4以降
- 加速度センサのデータを計測, 取得できる.
- 自力で歩数を計測する.
- iOS7以降
- ただしデータを取得できる端末は一部. 今のところiPhone5sしか利用できない.(M7がないとだめ)
- iOSが計測している歩数を取得できる. (保存は過去1週間分)
- 移動を監視し, 歩数カウントが更新されたタイミングでイベント取得.
cf. [iOS 7 SDK] Core Motion Framework の CMStepCounter と M7 | hirooka.pro
- CMStepCounterと同様, iPhone5sのみ.
- ユーザの移動に関する情報を管理する.
- CMMotionActivityのプロパティには以下の種類がある
- stationary(静止)
- walking(歩行)
- running(走行)
- automotive(乗り物移動)
- unknown(不明)
- 任意の期間の移動状態を計測し取得できる.
- 移動距離などの位置情報は取得できない. (Locationで取得する)
- iOS8以降
- iOS8にはHealth.appがプリインストールされている
- 健康に関する様々なデータ(血糖値, 消費カロリー, 歩数, 心拍数etc.)を管理.
- HealthKitの提供するAPIを使うことでデータを読み書き.(アプリごとに権限を許可する.)
- データの統計(平均, 最大値, 最小値)を取得できる.
- データにはどのアプリから登録されたかを判別するプロパティがある.
- データアクセスは非同期で扱う.
- データの種類が決まっている. (種類, 単位などが定められている代わり, シンプルに扱える)
- アプリ間のデータ共有ができる.
- 以下のデータタイプがある(iOS8 beta5時点)
- HKQuantityTypeIdentifierStepCount
- HKQuantityTypeIdentifierDistance
- 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未満同様, 自力で加速度センサー使って計測
- 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
- 2014秋発表?
- デバイス間, アプリ間でのデータ共有.
cf. Google Fit 発表。複数デバイスやアプリからフィットネス情報を集約管理 - Engadget Japanese
2014/08現時点でのまとめ
- iPhone5s: CMStepCounterを使って比較的容易に取得できる
- Other: 自力で加速度センサーを用いてロジックを作る
- ライブラリ: 確認できず; 加速度センサーを用いた実装例: pdetagyos/Pedometer
- iPhone5s: CMMotionActivityManagerを使って比較的容易に取得できる.
- Ohter: 自力で移動速度を測って判別.
- ライブラリ: SocialObjects-Software/SOMotionDetector
- 位置情報(CoreLocation)を使って測定.
- iOS8以降はHealthKitを使うことでアプリ間のデータ共有が容易.
- Nexus5のみStepCounterを使ってカウント可能.
- 実装例: j4velin/Pedometer
- それ以外は加速度センサーで自力計算.
- Activity Recognitionを利用して取得
- 位置情報を使って測定
- GoogleFitSDKは詳細不明