未来を変える日記

毎朝4時起床で人生を変える

ラップ数を得たい(2)

ガーミンアプリ開発17日目(通算11時間)

 前回はラップ数を得たいと書きながら、ちょっと寄り道して心拍数を表示することを試みた。寄り道の甲斐があって、2回目の今回でラップ数を得ることができた。

Instance Methodを使う

 前回は、関数にてラップ数を取得できると考えていて、getActivityInfo()などの関数を探していたが結局見つけられなかった。で、心拍数の表示に寄り道したんですが、寄り道の過程にて、API Docsの中に、Instance Methodなるものがあるのを知る(下にスクショ)。

f:id:corgi-eric:20191228204000p:plain

https://developer.garmin.com/connect-iq/api-docs/

onTimerLap

 詳細はリンク先を確認頂くとして、この中にonTimerLapというMethodがある。要は、ラップが増えたときに呼び出されるMethodで、このMethodを起点に必要な処理を書き加えてやればいい。

f:id:corgi-eric:20191228204624p:plain

コードの修正

 前回のコードからスクショ下線の箇所を追加した。スクショの下に箇条書きで説明を加える。

f:id:corgi-eric:20191228205020p:plain

  1. ver selectの追加(変数selectを宣言する)
  2. initialize()にselect = 0を追加(値を0にセットし、初期化する)
  3. compute(info)にswitch構文を追加する。selectの値に応じて、時計に表示させたい値をreturnする。
  4. onTimerLapを追加し、イベントは発生時にselectを0~2の範囲でカウントする。

修正内容の解説

 selectという変数を準備(初期値=0)し、ラップキーが押されたタイミングで値を増やす(但し、selectが3になったら0に戻す)。computeでは、selectの値に応じて、時計に表示させる値を選択する。

 今回は試しということで、宮古島ワイドーの制限時間を入力した。

  1. 46.5km 8時間
  2. 80km 11時間15分
  3. 90km 13時間

 90km地点で13時間だと残り10kmが1時間。走り切れないので、実際に目標とすべきタイムはこれとは別の時間になるべきだが、一先ずこれでラップキーを押すことで制限時間の表示を切り替えるプログラムにはなった。

プログラムのテスト

 静止画だとお伝えが難しいが実際に動かしてみた結果。シュミレータでラップキーを押してやると、表示する制限時間を切り替えることができることが確認できた。

f:id:corgi-eric:20191228205817p:plain
f:id:corgi-eric:20191228205831p:plain
f:id:corgi-eric:20191228205845p:plain

あ、でもラップキーじゃだめだな。。。

 よくよく考えたら・・・ラップキーで表示切替だと、ラップキーが本来の目的で使えなくなってしまう( ̄▽ ̄;) 本番では5km毎の自動ラップを入れたいからね。

と言う訳で再度予定を変更

 本番で使うプログラムには次の動作をさせた方が良さそうだ。

  • ランの距離が関門地点(46.5km, 80km, 90km)を超えたら
  • 時計に次の関門への到達目標タイムを表示させる

 心拍数を表示させたり、ラップ数で表示を切り替えたり、ちょっと寄り道してしまったが、そのおかげで上の仕様は容易に実現可能だとわかるようになった!