🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

2185閲覧

swiftのcoremotionを使って歩行時間の取得がしたい

AtsushiNakamura

総合スコア46

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2019/09/24 07:36

編集2019/09/25 05:29

swiftのcoremotionを使い簡単なダイエットアプリを作ろうと思っています
歩数、歩いた距離は取得できましたが、歩行時間の取得の仕方がわかりません
どなたかわかる方いれば教えていただきたいです。

参考にしているサイト
https://qiita.com/daisukeokaoss/items/ba9d16d102ef23ad6e62

import UIKit import CoreMotion class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. } let pedometer:CMPedometer = CMPedometer()//プロパティでCMPedometerをインスタンス化。 //ここは、クラスのプロパティで宣言すること。getWalkのローカル変数で記述してしまって、コールバックが呼ばれるときにインスタンスが消えててエラーが発生してしばらく詰まりました。 @IBAction func getWalk(_ sender: Any) { if(!CMPedometer.isStepCountingAvailable()) { //歩数が取得できるかどうかチェックしてます print("cannot get stepcount") } let from = Date(timeInterval: TimeInterval(-60*60*24*0), since: now) var component = NSCalendar.current.dateComponents([.year, .month, .day], from: from) component.hour = 0 component.minute = 0 component.second = 0 let start:NSDate = NSCalendar.current.date(from:component)! as NSDate //XX月XX日23時59分59秒に設定したものをendにいれる component.hour = 23 component.minute = 59 component.second = 59 let end:NSDate = NSCalendar.current.date(from:component)! as NSDate pedometer.queryPedometerData(from: start, to: end, withHandler: {(pedometerData, error) in print("歩数は(pedometerData!.numberOfSteps)") print("距離は(String(describing: pedometerData?.distance))") // 距離 print("登った回数(String(describing: pedometerData?.floorsAscended))") // 上った回数 print("降った回数(String(describing: pedometerData?.floorsDescended))") }) } }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

t_obara

2019/09/24 09:46

pedometerDataのstartDataからendDataの間ではないのでしょうか?
AtsushiNakamura

2019/09/24 12:43

pedometerDataのstartDataからendDataは測定時間が取得できます startData:2019-09-23 15:00:00 +0000 endData:2019-09-24 14:59:59 +0000
hameji

2019/09/25 05:09

上記にDate型の値が書いてあると思うので、 それを用いるとして、 googleで「日付の比較 swift」で探せば、 間の時間を計算する方法が出てくると思います。
AtsushiNakamura

2019/09/25 05:33

比較する時間をcoremotionでどのように取得したらいいのか分からないです。。 上記の頂いた回答ですと下記で取得できるイメージでしたが、歩行時間ではなく計測時間が取得できます。 pedometerData.endDate.timeIntervalSinceDate(pedometerData.startDate)
hameji

2019/09/25 08:37

止まっている時間を除きたいということですか??? なら、速度を取得し、速度が0出ない時カウントする必要がありますね。
guest

回答1

0

ベストアンサー

CoreMotionを使ったことはないのですが、下記が参考になると思います。

https://qiita.com/MilanistaDev/items/a24f418d3091072b23e8

中でも、「実装2」のアクティビティデータの取得のとこを改変し、
タイマーを用い、stationaryになったら、止め、それ以外は開始
もしくはそれぞれの瞬間の時刻を保存して間の時間を
計算で出す方法を用いればいいのではないでしょうか?
試してみてください。

(実用レベルにするにはバックグラウンドになる等の際の制御に苦労しそうな気がしますが、、、)

投稿2019/09/25 14:22

hameji

総合スコア1380

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

AtsushiNakamura

2019/09/26 02:13

ありがとうございます。 アクティビティデータの取得で静止・歩行の状態取得できたので 教えていただいたやり方で歩行時間を算出してみようと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問