Ant*_*shy 4 c pebble-watch pebble-sdk
我正在学习表面开发.我一直在密切关注Pebble指南,因此80%的代码与示例代码相同.我可能错过了很小的东西,但我的脸似乎没有正确订阅时间服务.
我究竟做错了什么?
在init(),我有:
tick_timer_service_subscribe(MINUTE_UNIT, tick_handler);
tick_timer_service_subscribe(DAY_UNIT, tick_handler);
Run Code Online (Sandbox Code Playgroud)
这是tick_handler:
static void tick_handler(struct tm *tick_time, TimeUnits units_changed) {
update_time();
}
Run Code Online (Sandbox Code Playgroud)
这是update_time:
static void update_time() {
time_t temp = time(NULL);
struct tm *tick_time = localtime(&temp);
static char time_buffer[] = "00:00";
static char date_buffer[] = "00/00/00";
if (clock_is_24h_style() == true) {
strftime(time_buffer, sizeof(time_buffer), "%H:%M", tick_time);
} else {
strftime(time_buffer, sizeof(time_buffer), "%I:%M", tick_time);
}
text_layer_set_text(s_time_layer, time_buffer);
strftime(date_buffer, sizeof(date_buffer), "%D", tick_time);
text_layer_set_text(s_date_layer, date_buffer);
}
Run Code Online (Sandbox Code Playgroud)
面部仅更新首次加载时的时间(通过调用update_time).
TimeUnits有点面具.你设置一个面具,然后调用tick_timer_service_subscribe一次.您使用DAY_UNITS进行的第二次通话正在改变您的订阅.要订阅这两个单元,您按位或您的掩码位:
tick_timer_service_subscribe(MINUTE_UNIT | DAY_UNIT, tick_handler);
Run Code Online (Sandbox Code Playgroud)
请注意您的tick处理程序如何具有TimeUnits参数.该参数告诉您哪个单元触发了处理程序.在您的情况下,您总是希望更新时间,看起来DAY_UNIT是多余的.但你可以这样做:
static void tick_handler(struct tm *tick_time, TimeUnits units_changed) {
if( (units_changed & MINUTE_UNIT) != 0 ) {
/* Minutes changed */
}
if( (units_changed & DAY_UNIT) != 0 ) {
/* Days changed */
}
}
Run Code Online (Sandbox Code Playgroud)