AppleWatchのアプリを作る(第二回)心拍数を計ってみる

AppleWatchのアプリを作る(第二回)心拍数を計ってみる

目次

心拍数を計ってみる
どんな仕組みなのか
ヘルスケアを参照する設定
ヘルスケアへの利用許可を下す
動作確認
心拍数を取得する処理を作る
次回予告

心拍数を計ってみる

前回は、AppleWatchのテンプレからハローワールドまで行きましたので、今回は何かしらの機能をつけていきたいと思います。そういえばスマートウォッチってヘルスケアに力を入れていたな、ということを思い出しまして今回は自分の心拍数を計ってみたいと思います。

 

どんな仕組みなのか

AppleWatchのアプリは、親になるiPhoneのアプリとセットになっている、というのは前回お話しましたが、心拍数の取得も同じ要領のようです。
実際にはiPhoneの純正アプリのヘルスケアのアプリを経由して心拍数を取得する形になります。

ヘルスケアを参照する設定

まずは、ヘルスケアの参照を追加します。このあたりは少しググると似たようなことをしている人がいますのでさらっと行きます。

以下のスクリーンショットのように、【アプリ名 Watchkit Extention】をクリック、Info のタブに、「Privacy Helth Share Usage Description」を追加

ヘルスケアへの利用許可を下す

  @IBOutlet weak var bpmlabel: WKInterfaceLabel!
  let healthStore = HKHealthStore()

  override func awake(withContext context: Any?) {
    super.awake(withContext: context)
    // デバイス上で利用できるか確認
    guard HKHealthStore.isHealthDataAvailable() else {
      bpmlabel.setText(“not available“)
     
      return
    }

        // ユーザにアクセス許可のダイアログを出す
    let dataTypes = Set([heartRateType])
    self.healthStore.requestAuthorization(toShare: nil, read: dataTypes) { (success, error) in
      guard success else {
        self.bpmlabel.setText(“not allow“)
     
        return
      }
    }
  }
 

動作確認

この段階で一度動作確認をしてみます。まずはエミュレータ上

エミュレータ上は英語になっていますが、問題なさそうです。
「GetHelthCare」と表示されている部分は、参照を追加した際にvalueに指定した値が表示されています。

実機でも問題なく表示されました。

 

 

心拍数の取得の処理を作る

https://developer.apple.com/documentation/healthkit

こちらのリンクに様々なメソッドが紹介されており、そちらを使用しました。すると、、

取れた!!と思ったんですが、6と5の間を推移していて人間の心拍数??という疑問が残ります。

次回予告

少し長くなってきたので、今回はこの辺までに。次回はさらっと流して紹介した実装内容をもう少し整理して、正常な値を取れるようにしてみたいと思います。