1

我将 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 应用消息中

js中的这段代码被执行了,虽然只有一次,我已经in_receiver()在我的watchapp的回调中记录了输出,并且我的第一个项目被记录了,但是记录器在那之后就退出了......这是因为watchapp不能发送蓝牙消息在这样的循环中?有没有办法确保消息已发送,或暂停执行以使其以较慢的速度发送?(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 和标题,然后停止记录。

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 上只有一个蓝牙缓冲区,一次只能保存一条消息。如果您在 for 循环中发送消息,则此缓冲区将被第一条消息填充,并且所有其他消息都将被拒绝。

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

于 2014-03-01T02:07:38.970 回答