Pebble WatchApp の設定をスマホから変更可能にする

公開日: : 最終更新日:2015/08/22 gadget, Pebble

invert-notinvert

このページは Pebble SDK 2.0 Tutorial #9: App Configuration | try { work(); } finally { code(); } の記事をおおまかに翻訳したものである。(Chris氏から許可いただきました)

Pebble アプリにはWatchface と WatchAppの2種類があり、WatchfaceはPebbleのハードウェアボタンを使用することができないのでPebble上で設定を変更することができない。

このため、Android/iOS 側で設定ページを用意する必要がある。

ここでは例として、Watchface や WatchApp の背景色をPebbleKit JSを使ってスマホ側で変更できるようにしてみる。

参考ページ Developer Guides // Pebble Developers

作業の流れ

  1. PebbleKit JS からデータを送れるように WatchAppでAppMessageを使えるようにする
  2. appinfo.json か、CloudPebble の設定ページで、AppMessageで使うKeyを設定する
  3. PebbleKit JS のコードを変更して設定ページをロードして watchappに送るようにする
  4. HTMLページを用意してユーザが設定を変更できるようにする

PebbleKit JS からデータを送るために WatchAppにAppMessage用コードを追加する

AppMessageInboxReceived ハンドラを用意し、メッセージを受けられるようにする。
ハンドラ中で persist date に値を書き込む。

static void in_recv_handler(DictionaryIterator *iterator, void *context)
{
  //Get Tuple
  Tuple *t = dict_read_first(iterator);
  if(t)
  {
    switch(t->key)
    {
    case KEY_INVERT:
      //It's the KEY_INVERT key
      if(strcmp(t->value->cstring, "on") == 0)
      {
        //Set and save as inverted
        text_layer_set_text_color(text_layer, GColorWhite);
        text_layer_set_background_color(text_layer, GColorBlack);
        text_layer_set_text(text_layer, "Inverted!");
 
        persist_write_bool(KEY_INVERT, true);
      }
      else if(strcmp(t->value->cstring, "off") == 0)
      {
        //Set and save as not inverted
        text_layer_set_text_color(text_layer, GColorBlack);
        text_layer_set_background_color(text_layer, GColorWhite);
        text_layer_set_text(text_layer, "Not inverted!");
 
        persist_write_bool(KEY_INVERT, false);
      }
      break;
    }
  }
}

下記を init などで実行する。

  • app_message_register_inbox_received((AppMessageInboxReceived) in_recv_handler);
  • app_message_open(app_message_inbox_size_maximum(), app_message_outbox_size_maximum());

書き込んだ persist data はwindow_load などで読み込む

appinfo.json に appkeys を追加する

App Metadata (SDK only) // Pebble Developers を参考に appinfo.json に appKeys を追加する。

今回の場合は  KEY_INVERT を追加する。

{
  "uuid": "153ff30e-0288-4411-871c-fce3dcc99e5f",
  "shortName": "sdktut9",
  "longName": "sdktut9",
  "capabilities": [ "configurable" ],
  "companyName": "Chris Lewis",
  "versionCode": 1,
  "versionLabel": "1.0.0",
  "watchapp": {
    "watchface": false
  },
  "appKeys": {
    "KEY_INVERT": 0
  },
  "resources": {
    "media": []
  }
}

PebbleKit JS から設定ページをロードして watchappに送る

PebbleKit JS は、スマートフォンから configuration page を読み込んでwatchappに結果を送るためのもので、src/js/pebble-js-app.js にある。 “showConfiguration” と “webviewclosed” のイベントで設定を行う。 デフォルトの状態

Pebble.addEventListener("ready",
  function(e) {
    console.log("PebbleKit JS ready!");
  }
);

showConfiguration イベントでは、ページを開く

Pebble.addEventListener("showConfiguration",
  function(e) {
    //Load the remote config page
    Pebble.openURL("https://dl.dropboxusercontent.com/u/10824180/pebble%20config%20pages/sdktut9-config.html");
  }

);

webviewclosed では、設定を読み込む

Pebble.addEventListener("webviewclosed",
  function(e) {
    //Get JSON dictionary
    var configuration = JSON.parse(decodeURIComponent(e.response));
    console.log("Configuration window returned: " + JSON.stringify(configuration));
 
    //Send to Pebble, persist there
    Pebble.sendAppMessage(
      {"KEY_INVERT": configuration.invert},
      function(e) {
        console.log("Sending settings data...");
      },
      function(e) {
        console.log("Settings feedback failed!");
      }
    );
  }
);



上記の URLにHTMLを用意して、ユーザが設定を変更できるようにする。


  
    SDKTut9 Configuration
  
  
    

Pebble Config Tutorial

Choose watchapp settings

Invert watchapp:

また、こちらのスクリプトも追加する。

HTML置き場として上記参考ページでは Dropbox の Public folder がおすすめされている。こちらを使うと自前でWebサーバを用意しなくてもすむ。

関連記事

no image

3DSのモンスターハンター3G体験版をやってみた感想

PSPのモンスターハンターポータブル 3rd (MHP3)にはまって、3DSも持っていたのでモンスタ

記事を読む

DELL 32インチディスプレイ U3223QE 購入

Dell U3223QE は解像度 3840x2160 の32インチディスプレイ。

記事を読む

深見先生のICT Music Session vol.2に参加してきた

2016年1月24日(日)14:00 - 16:30に行われた ICT Music Session

記事を読む

no image

Nintendo 3DS 開梱。ウィニングイレブン 3Dの感想

たまたまAmazonで予約できた3DSは、3/6以降の発送になっていたが、実際には3/4に届いた

記事を読む

FlashAir W-03活用開始

ようやく休みになったので、FlashAir W-03を活用してみることにした。まずは、iOSから使え

記事を読む

no image

Dell 27インチ IPS液晶ディスプレイ UltraSharp U2711 その3 感想

2月11日に注文し、3月17日に届いたDell U2711 だが、毎日激しく活用している。結論として

記事を読む

no image

レビュープラスに参加

レビュープラス なるサービスからメッセージが来ていて、面白そうだったので登録してみた。 これは自分が

記事を読む

Apple Event Apple Watch 3/10 2AM JST

Apple Watch に関するイベントが3/10(火)2:00AM JSTに行われるら

記事を読む

no image

モンスターハンターポータブル3rd ルーキーズ・ガイド (エンターブレインムック)

やたらと売れているらしいのできっと面白いのだろうと思って購入したMHP3だが、すっかりはまっている。

記事を読む

no image

東プレ Realforce 専用交換キーキャップ 2011/05/17

等荷重のRealforceを探すために時々検索をしているが、この前たまたま発見して注文したもの。 あ

記事を読む

Message

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Break Back 22巻まで読了

テニス漫画と言えば、ベイビーステップスだと思っていたし、全巻持ってい

TORRAS iPhone 16 Pro Max用ケース

自分はiPhoneはケースを付けない派で、iPhone 12

iPhone 16 Pro Max 購入

iPhone 16 Pro Max 256GB 189000

Ember Mug 2のACアダプタをUSB Type-Cに変えてみた

冬になると活躍する Ember Mug 2 の充電器は付属のACアダ

Wi-Fi6Eルータ TP-Link AXE5400購入

Wi-Fi6E を試してみたくなり、TP-Link AXE5

→もっと見る

  • 2015年8月
     12
    3456789
    10111213141516
    17181920212223
    24252627282930
    31  
PAGE TOP ↑