1

小石にsdk2を使用し、js appmessage機能を使用しています:

メニュー項目ごとに、電話でpebble jsに連続メッセージを送信しようとしています。変数 movie_count = 5 が存在し、これをループに使用します。以下のコードに示すように 5 としてログアウトされるため、すべての 5 に到達し、少なくともエラーをログに記録する必要がありますが、その後は何もログに記録しません初めて:

static void up_click_handler(ClickRecognizerRef recognizer, void *context) {
 int i;
 APP_LOG(APP_LOG_LEVEL_DEBUG, "movie_count int %u", movie_count);
 for(i = 0;i<movie_count;i++){
    Tuplet build_menu_tuple =  TupletInteger(BUILD_MENU_KEY, 1); // just a flag for the  appmessage js code
    Tuplet menu_id_tuple =  TupletInteger(MENU_ID_KEY, i);
    DictionaryIterator *iter;
    app_message_outbox_begin(&iter);
    if (iter == NULL) {
       return;
    }
    dict_write_tuplet(iter, &build_menu_tuple);
    dict_write_tuplet(iter, &menu_id_tuple);
    dict_write_end(iter);
    app_message_outbox_send();
}
}

in JS アプリメッセージ

js のこのコードが実行されin_receiver()ますが、watchapp のコールバックに出力を記録したのは 1 回だけですが、最初の項目はログに記録されますが、その後ロガーは終了します...これは、watchapp が blutooth メッセージを送信できないためですか?こんなループで?メッセージが送信されたことを確認する方法、または実行を一時停止して送信速度を遅くする方法はありますか? (movies_json は以下のコードの上に存在します。簡潔にするために省略しましたが、ムービーの内部配列を持つ json オブジェクトがあります)

if(e.payload.build_menu){

            var menu_id = e.payload.menu_id;

            console.log("menu_id" + menu_id);

            Pebble.sendAppMessage({"title":movies_json.movies[menu_id].title,

                                   "stars":movies_json.movies[menu_id].stars,

                                   "menu_id":menu_id

            });

            console.log("movie title:" + movies_json.movies[i].title);

        }

js からのメッセージを処理する in_recived_handler コールバック コード

このコードは、phones js からメッセージを受け取るコールバックにあります...最初のアイテムに到達するだけで、最初のアイテムの menu_id と title だけをログに記録し、ログを停止します。

if(menu_id_tuple){
  int menu_id;
  menu_id = menu_id_tuple->value->int32;
  char movie_title[30];
  strncpy(movie_title, movie_title_tuple->value->cstring, 30);
  APP_LOG(APP_LOG_LEVEL_DEBUG, "In received handler movie_title: %s" , movie_title);
  APP_LOG(APP_LOG_LEVEL_DEBUG, "In received handler menu_id: %u" , menu_id);

}

4

1 に答える 1

2

次のメッセージを送信するには、最初のメッセージが送信されるまで待つ必要があります。

これを行う適切な方法は、イベントのコールバックを登録しoutbox_sent、このイベントで次のメッセージをキューに入れることです。

説明

Pebble には 1 つの Bluetooth バッファしかなく、一度に 1 つのメッセージしか保持できません。for ループでメッセージを送信すると、このバッファは最初のメッセージでいっぱいになり、他のすべてのメッセージは拒否されます。

の戻り値をチェックすると、エラー メッセージが表示されますapp_message_outbox_send()AppMessageOutboxFailedハンドラーも実装する必要があります。

于 2014-03-01T02:07:38.970 に答える