如何从PebbleKit for Android向手表发送项目列表

时间:2015-01-06 23:04:20

标签: android pebble-watch

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

  • title(字符串,最多255个字符)
  • id(整数)
  • 秒(整数)
  • time_started(整数)
  • seconds_left(整数)
  • running(boolean)
  • 订单(整数)

这些计时器可以有无限数量,但对于卵石监视应用程序,如果我只发送第一个 n (10,15,20),它就可以了。 / p>

目前,我一直将这些项目发送到手表,并像这样创建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被激活之后将其发送到手表。

这很有效,但速度很慢。我觉得通过在每条消息中包含多个计时器可以节省大量时间。但是,我不知道怎么做,考虑到卵石手表本身的收件箱大小,以及你必须在appinfo.json中难以定义字典键的事实(它似乎没有看起来就像你可以使用任意键一样。)

这种事情通常怎么做?

1 个答案:

答案 0 :(得分:1)

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

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

一些评论:

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