This project is to learn ConnectIQ SDK and Monkey-C language.

Online References

https://developer.garmin.com/connect-iq/overview/

How to set up project

  • install VS Code Plugin
  • ⌘(command) + shift + p : Monkey C: New Project
  • ⌘(command) + shift + p : Monkey C: Edit Products
  • Open [xxx.mc] file
  • ⌘(command) + shift + p : Monkey C: Run Tests

Components

layouts/layout.xml

ウォッチフェイス上のオブジェクト配置とスタイルを決める。一番重要

Layout

https://developer.garmin.com/connect-iq/core-topics/layouts/

  • WatchUi.Drawable オブジェクトとして定義されている。
  • layouts/layout.xml に記載することで、コード変更なしにレイアウト記述可能
  • View.setLayout() の中で View.onLayout()を呼ぶことで適用可能
  • 親の View.OnUpdate を呼ぶことで画面更新される

components

  • label : テキスト
  • justification : 配置の基準位置。Graphics.TEXT_JUSTIFY_CENTER使えば大体OK
  • font : フォント. Graphics クラスに含まれる定数 or 外部で定義した時のユーザーID
  • x,y 座標。指定する値は以下
  • pixel value
  • a relative position using ‘%’
  • 文字列 center, left, right, start
  • colo : Graphics クラスに含まれる定数 or 0xRRGGBB
  • textarea
  • drawables : ビットマップもしくは XML リソース
  • drawable-list : ビットマップもしくは XML リソースのリスト
  • shape
  • bitmap
  • drawable はサンプルアップを見るのが良いとのこと
  • shape : 図形:短形
  • bitmap : 画像:パスでファイル名を指定する

SDK References 確認

cd ~/Library/Application\ Support/Garmin/ConnectIQ/Sdks/

point

  • アプリ実行時に、開発者はシステムが「持っている」機能を尋ねることができます
  • 特定デバイスにしかない機能の使用などは最初に場合分けできる
  • パスを通せばコマンドライン実行もできるっぽい
export PATH=$PATH:`cat $HOME/Library/Application\ Support/Garmin/ConnectIQ/current-sdk.cfg`/bin
monkeyc [-d <arg>] [-f <arg>] [-o <arg>] [-y <arg>]
  • サンプルのインポート
ls -l ~/Library/Application\ Support/Garmin/ConnectIQ/Sdks/connectiq-sdk-mac-4.1.7-2022-11-21-562b8a195/samples
  • WatchFace で使える API

  • ActivityMonitor

  • Application

  • Background (バックグラウンドタスク?)

  • BluetoothLowEnergy

  • Cryptgraphy

  • Graphics

  • Lang

  • Math

  • SensorHistory

  • StringUtil

  • System

  • Test

  • Time

  • Timer

  • UserProfile

  • WatchUi

  • Weather

  • WatchFace はバッテリー消費を抑えるために機能が少なめ

  • デザインが悪いと、バッテリー消費が増加する

  • WatchFace のライフサイクルは 通常時→スリープ時→(腕を上げる)→通常時 となる


ウォッチフェイスは、このモードの「スリープ モード」で大部分の時間を費やします。実行は 1 分ごとに 1 回の更新に制限され、タイマーやアニメーションは使用できません。 ユーザーが時計を見るために持ち上げると、時計の文字盤はスリープ モードを終了します。 これが発生すると、WatchFace.onExitSleep() メソッドが呼び出され、更新が 1 秒に 1 回に増え、WatchFace.onEnterSleep() メソッドが呼び出されるまでタイマーとアニメーションが許可されます。

  • Delegate はシステム→watchgace のアクセスを管理。ユーザーは気にしなくてOK
  • Debug.log への出力方法

System.println( "Hello Monkey C!" );

  • Monkey C にはプリミティブ型がありません

  • Monkey C は、仮想マシンによって解釈されるバイト コードにコンパイルされます。 また、Java と同様に、すべてのオブジェクトがヒープに割り当てられ、仮想マシンがメモリをクリーンアップ(参照カウントによる)

  • Monkey C でコールバックを作成するには、Method オブジェクトを作成します。

  • Monkey C は参照カウントされます。つまり、メモリを参照するオブジェクトの数がゼロになると、ランタイム システムはメモリを解放します。

  • API Docs ~/Library/Application%20Support/Garmin/ConnectIQ/Sdks/connectiq-sdk-mac-4.0.10-2022-02-08-277ce4444/doc/index.html

  • Dc : デバイスコンテキストの略。描画するためのメソッドを含む : Drawable に描画する 

  • permission 設定が必要

描画系

~/Library/Application%20Support/Garmin/ConnectIQ/Sdks/connectiq-sdk-mac-4.0.10-2022-02-08-277ce4444/CoreTopics.html#graphics

ストアへの掲載

~Library/Application%20Support/Garmin/ConnectIQ/Sdks/connectiq-sdk-mac-4.0.10-2022-02-08-277ce4444/CoreTopics.html#publishingtotheconnectiqstore

Sample 分析

https://github.com/DenysTT/Garmin_BackToTheFuture_WatchFace

Important methods

setProperty