for循环中的Pebble JS app_message_outbox_send()

时间:2014-02-28 21:26:34

标签: pebble-watch pebble-sdk

我使用sdk2作为pebble,使用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();
}
}
JS appmessage中的

js中的这段代码被执行了,虽然只有一次,我已经在我的watchapp的in_receiver()回调中记录了输出,我的第一个项目被记录了,但是记录器刚刚退出...是这是因为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);

        }

in_recived_handler回调代码,用于处理来自js

的消息

此代码位于回调中,它接收来自手机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);

}

1 个答案:

答案 0 :(得分:2)

您需要等到发送第一条消息后发送下一条消息。

执行此操作的正确方法是为outbox_sent事件注册回调并在此事件中对下一条消息进行排队。

说明

pebble上只有一个蓝牙缓冲区,一次只能容纳一条消息。如果您在for循环中发送消息,则此缓冲区将填充第一条消息,并拒绝所有其他消息。

如果您检查app_message_outbox_send()的返回值,则会看到错误消息。您还应该实现AppMessageOutboxFailed处理程序。