1

アプリの設定ページ(htmlページ)のテキストエリアからテキストを取得し、その値をウォッチフェイスのテキストレイヤーに入れるPebbleスマートウォッチウォッチフェイスがあります。

残念ながら、これが意図したとおりに機能しない原因が 2 つあります (1 つの解決策で両方が解決されることを願っています)。

1) 改行 (例: \n はテキスト レイヤーでは機能せず、新しい行に移動する代わりに '\n' 文字を表示するだけです 2) ペアになっていない ' (アポストロフィ) と " (引用符) は機能しませんページを更新する (つまり、動かない)

ウォッチフェイスと構成の間の通信を操作するのは得意ではありませんが、この 1 つの問題を除けば、他のすべては正常に機能しているようです。以下は、テキスト領域からテキストレイヤーにテキストを取得するために取ったパスです。

関連するスクリプト (config.html 内)

[].forEach.call(document.querySelectorAll("#save"), function(e1) {
                e1.addEventListener("click", function() {
                    console.log(saveOptions());
                    var return_to = getQueryParam('return_to', 'pebblejs://close#');
                    document.location = return_to + encodeURIComponent(JSON.stringify(saveOptions()));
                });
            });

関連する JavaScript (script.js)

    Pebble.addEventListener('webviewclosed', function(e) {
      var options = JSON.parse(decodeURIComponent(e.response));
      message = options.message;

var dict = {
    'MESSAGE_DATA' : message
  };

  //Send a string to Pebble
  Pebble.sendAppMessage(dict, function(e) {
    console.log("Send successful.");
  }, function(e) {
    console.log("Send failed!");
  });
}

関連する main.c:

static void inbox_received_callback(DictionaryIterator *iterator, void *context) {
  APP_LOG(APP_LOG_LEVEL_INFO, "Message received!");

  // Get the first pair
  Tuple *t = dict_read_first(iterator);

  // Process all pairs present
  while(t != NULL) {
  // Process this pair's key
    switch (t->key) {
      case MESSAGE_DATA:
        snprintf(message_buffer, sizeof(message_buffer), "%s", t->value->cstring);
        APP_LOG(APP_LOG_LEVEL_INFO, "MESSAGE_DATA received with value %d", (int)t->value->int32);
        break;
      default:
        APP_LOG(APP_LOG_LEVEL_ERROR, "Key %d not recognized!", (int)t->key);
        break;
    }

    // Get next pair, if any
    t = dict_read_next(iterator);
  }
}

編集:問題1を解決するために追加message.replace(/[\n\r]/g, ' ');が機能しませんでした:/

4

1 に答える 1

0

Cは改行を正しく表示するため、これは JS と C の間の変換で失われると思います。# や $ など、送信する実際のメッセージには表示されない可能性が高いすべての改行を、特殊文字の使用を検討する必要があります。次に、C で文字配列を反復処理し、その特殊文字のすべてのインスタンスを \n に置き換えます。

于 2015-06-04T14:09:53.947 に答える