【问题标题】:Why does my Pebble watchface not update the time every minute?为什么我的 Pebble 表盘没有每分钟更新时间?
【发布时间】:2014-11-18 21:25:26
【问题描述】:

我正在学习表盘开发。我一直密切关注 Pebble 指南,所以我的代码 80% 与他们的示例代码相同。我可能遗漏了一些非常小的东西,但我的脸似乎没有正确订阅时间服务。

我做错了什么?

init(),我有:

tick_timer_service_subscribe(MINUTE_UNIT, tick_handler);
tick_timer_service_subscribe(DAY_UNIT, tick_handler);

这里是tick_handler

static void tick_handler(struct tm *tick_time, TimeUnits units_changed) {
  update_time();
}

这里是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);
}

面部仅在首次加载时更新时间(通过调用update_time)。

【问题讨论】:

    标签: c pebble-watch pebble-sdk


    【解决方案1】:

    TimeUnits 是位掩码。您设置一个掩码,然后调用一次tick_timer_service_subscribe。您使用 DAY_UNITS 的第二个电话正在更改您的订阅。要订阅这两个单元,请按位或掩码位:

    tick_timer_service_subscribe(MINUTE_UNIT | DAY_UNIT, tick_handler);
    

    请注意您的刻度处理程序如何具有 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 */
        }
    }
    

    【讨论】:

    • 感谢您的精彩解释。我的表盘实际上显示了现在的时间。我想知道为什么他们在tick_handler 中有参数。我猜订阅函数需要它们(如 JS 中的回调),所以我不能只删除它们。我仍然很好奇,为什么在需要时可以简单地使用 localtime 生成一个 struct ™。
    • 很好的解释@indiv! Antrikshy:Tick_timer 会在秒或分钟发生变化时准确地给你回电。这比设置一个每秒(或每分钟)唤醒您并且不会与实际时间变化精确同步的计时器要好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-24
    • 2015-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多