前回に引き続きPebbleです
前回Watchfaceを作ってみましたが、バッテリー残量が無かったのがちょっと不便でしたね。
そんな訳で今回はバッテリー残量を追加してみました。
バッテリー残量をWatchfaceに追加してみる
初期状態で表示するようにします
まずはグローバル変数に今回追加した部分で必要なのを追加。
// まずTextLayer準備 static TextLayer *battery_layer; // 表示テキスト用のバッファ用意 static char s_battery_buffer[16];
その後、window_load関数に初期表示を実装します。
battery_layer = text_layer_create(PBL_IF_ROUND_ELSE( GRect(75, 158, 40, 20), GRect(62, 148, 40, 20))); // バッテリーの状態を取得 // 他にも充電中かとかの情報もとれる BatteryChargeState charge_state = battery_state_service_peek(); snprintf(s_battery_buffer, sizeof(s_battery_buffer), "%d%%", charge_state.charge_percent); text_layer_set_text(battery_layer, s_battery_buffer); text_layer_set_background_color(battery_layer, GColorClear); text_layer_set_text_color(battery_layer, GColorDarkCandyAppleRed); text_layer_set_font(battery_layer, fonts_get_system_font(FONT_KEY_GOTHIC_18_BOLD));
こんな感じですね。
PBL_IF_ROUND_ELSEマクロでPebble Time Roundと両対応に出来るみたいですね。
バッテリ状態に変更があったら、テキスト再描画する
今までだと初期表示しか対応していないので、状態が変わったら再描画して欲しいのです。
なので関数を追加します。
static void battery_handler(BatteryChargeState charge_state) { snprintf(s_battery_buffer, sizeof(s_battery_buffer), "%d%%", charge_state.charge_percent); text_layer_set_text(battery_layer, s_battery_buffer); }
そしてwindow_load関数の中でこれを登録
battery_state_service_subscribe(battery_handler);
unload時には破棄する
どこまで影響あるか分かりませんが、出来るだけお行儀よくunload時はそれぞれ破棄してからにします。
text_layer_destroy(battery_layer); battery_state_service_unsubscribe();
こんなところですかね。
無事にインストール出来ました。
Pebble開発のドキュメント
https://developer.getpebble.com/
ここで公式のドキュメントがありますが、充実していますね。
検索も欲しいの簡単に見つけられたので、あまりない日本語の情報を探すより公式ドキュメントの方がよさそうです。
GitHub
コード全体はこちらで公開しています。
https://github.com/shizukukun/aldevetzwatch