如何将项目列表从 PebbleKit 发送到手表 Android

How to send a list of items to the watch from PebbleKit for Android

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

这些计时器的数量没有限制,但对于 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;
}

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

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

这种事情一般是怎么做的?

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

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

几点评论:

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