Я изучаю разработку часов. Я внимательно слежу за руководством Pebble, поэтому 80% моего кода совпадает с кодом примера. Я, вероятно, пропустил что-то очень маленькое, но мое лицо, похоже, не правильно подписано на службу времени.Почему мой Pebble watchface не обновляет время каждую минуту?
Что я делаю неправильно?
В 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
).
Благодарим вас за отличное объяснение. Мое наблюдение на самом деле показывает время. Мне было интересно, почему у них были параметры в 'tick_handler'. Я предполагаю, что функция подписки ожидает их (например, обратные вызовы в JS), поэтому я не могу просто удалить их. Мне все еще интересно, почему это struct ™ существует, когда можно просто использовать 'localtime' для генерации, когда это необходимо. – Antrikshy
Gread explain @indiv! Antrikshy: Tick_timer перезвонит вам точно, когда смена секунд или минут. Это лучше, чем установка таймера, который пробуждает вас каждую секунду (или каждую минуту) и не будет точно синхронизироваться с фактическим изменением времени. – sarfata