LoginSignup
3
5

More than 5 years have passed since last update.

CMPedometerを用いた歩数の取得方法

Posted at

検証環境

  • XCode8.3.3
  • Swift3.1
  • iOS10.3.1
  • iPhone6s+

歩数の取得

端末内の歩数はCMPedometerで取得できる。
https://developer.apple.com/documentation/coremotion/cmpedometer

Info.plistにNSMotionUsageDescription(Privacy - Motion Usage Descriptionに自動で置き換えられた)を追加して利用目的を書く必要がある。これがないとクラッシュする。

コード

以下のようなコードで簡単に歩数を取得することができた。handlerが実行されるのはメインスレッドではないので、UIを更新する場合は、メインスレッドでの実行が必要なので注意が必要。

startUpdates(from:withHandler:)などでライブでデータを取得する場合はstopも呼ぶようにする。


@IBOutlet weak var label: UILabel!
    var pedometer: CMPedometer!

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.

        pedometer = CMPedometer()

        let calendar = Calendar(identifier: .gregorian)
        let date = calendar.date(from: DateComponents(year: 2017, month: 9, day: 4))!

        // onetime
        pedometer.queryPedometerData(from: date, to: Date()) { (data, error) in
            guard let data = data else { return }
            DispatchQueue.main.async {
                self.label.text = "\(data.numberOfSteps)"
            }
        }

        // always
        pedometer.startUpdates(from: date) { data, error in
            guard let data = data else { return }
            DispatchQueue.main.async {
                self.label.text = "\(data.numberOfSteps)"
            }
        }
    }

    deinit {
        pedometer.stopUpdates()
    }
3
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
5