如何将项目列表从 PebbleKit 发送到手表 Android
How to send a list of items to the watch from PebbleKit for Android
我有一个 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;
}
并通过 queue 发送它,在确认前一个 PebbleDictionary 后将下一个 PebbleDictionary 发送到手表。
这行得通,但速度很慢。我觉得我可以通过在每条消息中打包多个计时器来节省很多时间。但是,我不确定该怎么做,考虑到 pebble 手表本身的收件箱大小,以及您必须在 appinfo.json 中硬定义字典键的事实(看起来不像您可以使用任意键)。
这种事情一般是怎么做的?
有两种方法可以做到这一点:
- 每个项目一条消息(你现在正在做什么)
- 每条消息有多个项目。
- 在这种情况下,您可以使用字节数组并将所有字段连接到字节数组中,从而将所有内容打包成一个值。
- 然后您可以使用键发送列表中元素的索引。
几点评论:
- 在
appinfo.json
中定义键是可选的,仅当您使用 PebbleKit JavaScript 时才有用。它对与 PebbleKit 对话的应用程序绝对没有用 Android。
- 您可以使用
app_message_inbox_size_maximum()
在 Pebble 上查询可用缓冲区大小。当您启动您的应用程序并将其从 Pebble 发送到 Android 应用程序时获取它。
- 最佳策略取决于消息的平均大小。现在你的项目将是大约 25 字节 + 字符串 + 字典的小开销(7 字节 + 每个键 1 字节)。如果字符串非常小,每条消息可能适合三个项目,如果描述很长,您可能根本无法发送该项目(您可能应该截断它)。
我有一个 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;
}
并通过 queue 发送它,在确认前一个 PebbleDictionary 后将下一个 PebbleDictionary 发送到手表。
这行得通,但速度很慢。我觉得我可以通过在每条消息中打包多个计时器来节省很多时间。但是,我不确定该怎么做,考虑到 pebble 手表本身的收件箱大小,以及您必须在 appinfo.json 中硬定义字典键的事实(看起来不像您可以使用任意键)。
这种事情一般是怎么做的?
有两种方法可以做到这一点:
- 每个项目一条消息(你现在正在做什么)
- 每条消息有多个项目。
- 在这种情况下,您可以使用字节数组并将所有字段连接到字节数组中,从而将所有内容打包成一个值。
- 然后您可以使用键发送列表中元素的索引。
几点评论:
- 在
appinfo.json
中定义键是可选的,仅当您使用 PebbleKit JavaScript 时才有用。它对与 PebbleKit 对话的应用程序绝对没有用 Android。 - 您可以使用
app_message_inbox_size_maximum()
在 Pebble 上查询可用缓冲区大小。当您启动您的应用程序并将其从 Pebble 发送到 Android 应用程序时获取它。 - 最佳策略取决于消息的平均大小。现在你的项目将是大约 25 字节 + 字符串 + 字典的小开销(7 字节 + 每个键 1 字节)。如果字符串非常小,每条消息可能适合三个项目,如果描述很长,您可能根本无法发送该项目(您可能应该截断它)。