Connect IQ > メモ作成中

下位ページ

Content

サンプルコード

Keyboard ボタンとかの入力を扱うサンプル Watch Face
SingleDataField ごく単純なDataPage用で、大概の画面分割表示に対応できる、シンプルな表示。 Data Field


現在のデータの取得 - Activity.info

  • 現在の速度 : Activity.info.currentSpeed
    • 単位は m/s

現在のペースを表示する

SpeedからPaceをつくる

Activity.infoにはcurrentSpeed[m/s]しかない。(Paceは無い)
Paceはmin:sec[/km]なので、
1 / (currentSpeed / 1000)
とすれば、[s/km](float)になる。

秒(float)を◯:◯◯で表示する

SingleDataFieldでは、compute()で、戻り値にDurationオブジェクトを指定すると、そのまま◯:◯◯で表示ができるみたい。
Time::Gregorian::duration(options)を使うと、Durationオブジェクトを生成できる。
このとき、optionsにはシンボルを使って、変換元が秒なのか分なのか教える連想配列を指定する。

var val = 1 / (currentSpeed / 1000); // [sec/Km]
var options = { :seconds => val};    // valはsecで表現してます、と教える
val2 = Time.Gregorian.duration(options) // これで変換

なので、

var val = 1 / (currentSpeed *60 / 1000); // [min/Km]
var options = { :minutes => val};    // valはminで表現してます、と教える
val2 = Time.Gregorian.duration(options) // これで変換

としても同じ。(桁落ちとか無視すれば)


ボタンの入力を受け付ける

クラス InputDelegate を拡張したクラスを準備する
このクラスは、AppBaseのgetInitialView()の戻り値に登録して、関連付けする。
InputDelegateの関数 onKeyをオーバライドする。キーが押されると呼ばれる。
どのキーが押されたか、はonKeyの引数(evt)をつかって
evt.getKey()
の値で確認。
サンプルコード(Keyboard)では、ここで Toybox::WatchUiのpushViewで「Viewに書き出して」と依頼する。(ビューのスタック)
Push a View onto the View stack with pushView().

(Object) pushView(view, delegate, transition)
  • view (View) プッシュするView
  • delegate プッシュしたビューで、入力を扱うための入力delegate
  • transition ビューが遷移するときの動作

Layout

Viewでは
onLayout()

アクティビティの計測・記録を行う

ActivityRecording を使うには、パーミッション Fit が必要。
  1. createSessionで作成
  2. startで開始
  3. stopで停止
  4. save or discard で保存・破棄して終了

Sessionの作成

(Session) createSession(options)
同時の存在できる Session オブジェクトは一つだけ。もし既に存在する(作成して、save や discard で破棄されていない)状態で createSession が呼ばれると、エラーとなる(APIドキュメントでは「既に存在するオブジェクトが返ってくる」と書いてあるように思えるが、エラーが出た。)
  • options (Dictionary)

session = Record.createSession({:name=>"Walk", :sport=>Record.SPORT_WALKING});
    • :sport (Object) : メインカテゴリ。任意(デフォルト SPORT_GENERIC )
    • :subSport (Object) : サブカテゴリT。任意(デフォルト SUB_SPORT_GENERIC )
    • :name (String) : Required. 名称。必須。様々なデバイスへの対応を考慮すると、15文字以内が望ましい。


シミュレータでの注意

start() を実行しても、シミュレータ上は Activity.info は null のまま。シミュレータの
Simulation -> Fit Data (Playback Fileでも可) -> Simulate Data
を実行すると、Activity.info に情報が入りだす。

シミュレータと実機の差

Dc.drawText で表示されるのは文字列。シミュレータ上は、数値や null 値も文字列に自動で変換されるが、実機では文字列以外はエラーになる。


現在時刻を使う

System モジュールの ClockTime クラスを使う
var cltm = System.getClockTime();
System.println(cltm.sec); // 秒を表示

KEY_ESCで終了させる、させない

KEY_ESCのキーを押すと、通常?終了したりする。が、Lapに使ったりもしたい。その場合は、return true とすると終了しない。ただし、必ずreturn true としてしまうと、どのボタンを触っても終了しなくなってしまうので注意する。
最終更新:2016年03月05日 12:23