【发布时间】:2014-02-28 21:26:34
【问题描述】:
我正在使用 sdk2 for 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中的这段代码被执行了,虽然只执行了一次,我已经在我的watchapp的in_receiver()回调中记录了输出,并且我的第一个项目被记录了,但是记录器在那之后就退出了......这是因为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);
}
【问题讨论】: