どうもおはようございます、こんにちは、こんばんは。
はじめに
ユーザーが今なんの交通手段を利用しているか把握するための実装でデフォルトのCoreMotionではどこまでできるかの確認。
動作状態の取得
iOSはCoreMotionというフレームワークを使うことで、加速度センサーやや端末の動作状態(歩き、自転車、自動車)、歩数の取得を行うことができる。
実際に走ってみたががっつり走らないとRunにはならなかった。 ネットの情報を見ると精度を上げれば結構リアルタイムに検知してくれるそう。
位置情報を取得している間は時間が青くなる。
動作状態の取得実装
CMMotionActivityManagerインスタンスを作成し、センサーを使用して良いか許諾をとる。 状態の取得、DBに送信。
private var activityManager = CMMotionActivityManager()
private func gethogehogeMotion() { //
self.activityManager.startActivityUpdates(to: OperationQueue.current!,
withHandler: {(data: CMMotionActivity?) in
DispatchQueue.main.async(execute: { () in
guard let exData = data else {
return
}
let stationary = exData.stationary
let walking = exData.walking
let running = exData.running
let automotive = exData.automotive
let cycling = exData.cycling
switch exData.confidence {
case .low:
self.confidenceLabel.text = "Low"
case .medium:
self.confidenceLabel.text = "Medium"
case .high:
self.confidenceLabel.text = "High"
@unknown default:
fatalError("not confidence")
}
if stationary {
self.status = "stationary"
} else if walking {
self.status = "walking"
} else if running {
self.status = "running"
}
if automotive {
self.status = "automotive"
} else if cycling {
self.status = "cycling"
}
self.activityStateLabel.text = self.status
self.firestore.db.collection("activity").addDocument(data: ["state":self.status])
})
})
}
最後に
やっぱ機械学習とかが必要になってきますよね。 というか他の行動把握の外部サービスも取得しているデータは基本一緒でどう活かすか、ロジックに組み込むかって気がす。
SilentLogってサービス利用(デモ版使用するにも打ち合わせあったりめんどい)や 以下のようなサイトも参考になりました。 http://www.vled.or.jp/odpc-archive/
ブログの投稿は基本毎日19時頃する予定です。