【问题标题】:How to send a list of items to the watch from PebbleKit for Android如何从 PebbleKit for Android 向手表发送项目列表
【发布时间】:2015-01-06 23:04:20
【问题描述】:

我有一个 Android 应用程序,它本质上是一个计时器列表。每个计时器可以有以下字段:

  • 标题(字符串,最多255个字符)
  • id(整数)
  • 秒(整数)
  • time_started(整数)
  • seconds_left(整数)
  • 正在运行(布尔值)
  • 顺序(整数)

这些计时器的数量可以是无限的,但对于 pebble watch 应用程序,如果我只发送第一个 n (10, 15, 20) 就可以了。

目前我一直在一次将物品发送到手表,并像这样创建PebbleDictionary

private PebbleDictionary buildTimerDictionary(Timer timer) {
    PebbleDictionary data = new PebbleDictionary();
    data.addUint32(C.KEY_ID, timer.getId());
    data.addUint32(C.KEY_SECONDS, (int)timer.getSeconds());
    data.addString(C.KEY_DESCRIPTION, timer.getDescriptionFormatted());
    data.addUint32(C.KEY_TIME_STARTED, (int)timer.getTimeStarted());
    data.addUint32(C.KEY_TIME_LEFT, (int)timer.getSecondsLeft());
    data.addUint8(C.KEY_RUNNING, (byte)(timer.isRunning() ? 1 : 0));
    data.addUint32(C.KEY_ORDER, (int)timer.getOrder());
    data.addString(C.KEY_TIME_DISPLAY, timer.getSecondsFormatted());
    return data;
}

并通过队列发送它,该队列在前一个被确认后将下一个 PebbleDictionary 发送到手表。

这可行,但速度很慢。我觉得我可以通过在每条消息中包含多个计时器来节省大量时间。但是,考虑到 pebble 手表本身的收件箱大小,以及您必须在 appinfo.json 中硬定义字典的键这一事实,我不确定该怎么做(看起来您不能使用任意键)。

这种事情通常是怎么做的?

【问题讨论】:

    标签: android pebble-watch


    【解决方案1】:

    有两种方法可以做到这一点:

    • 每个项目都有一条消息(您现在正在做什么)
    • 每条消息有多个项目。
      • 在这种情况下,您可以通过使用字节数组并将所有字段连接到字节数组中,将所有内容打包成一个值。
      • 然后您可以使用该键发送列表中元素的索引。

    几个cmets:

    • appinfo.json 中定义键是可选的,只有在使用 PebbleKit JavaScript 时才有用。对于与 PebbleKit Android 对话的应用,它绝对没有用处。
    • 您可以使用app_message_inbox_size_maximum() 查询 Pebble 上的可用缓冲区大小。在您启动应用并将其从 Pebble 发送到 Android 应用时获取它。
    • 最佳策略取决于邮件的平均大小。现在你的项目将是大约 25 字节 + 字符串 + 字典的小开销(7 字节 + 每个键 1 字节)。如果字符串非常小,则每条消息可能包含三个项目,如果描述很长,则可能根本无法发送该项目(您可能应该截断它)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-29
      • 1970-01-01
      • 2018-07-02
      • 2017-04-13
      相关资源
      最近更新 更多