【问题标题】:Request - Response API for Android Wear 2.0?请求 - Android Wear 2.0 的响应 API?
【发布时间】:2017-08-14 15:41:00
【问题描述】:

如何为 Android Wear 2.0 应用实现请求-响应协议?

场景:

当我点击手表上的按钮时,我希望它从手机中获取一些数据并将其显示在手表的屏幕上。

我尝试了什么:

我使用MessageApi 实现了一个工作示例,但我不喜欢它。我使用一种方法在一个地方发送了一个虚拟“请求”,我忽略了PendingResult,然后希望最终我会收到一条相应响应的消息。

理想情况下,我想要的是:

byte[] responseBytes = sendRequest(someRequestBytes);

【问题讨论】:

  • 您的“理想”解决方案是同步函数调用,这不是设备间通信的工作方式。无线数据传输需要时间,这就是 Wear 数据和消息 API 采用异步结构的原因。
  • @String 我对异步请求-响应 API 非常满意——Futures、Promises 等等。这就是问题的标题和正文。
  • 嗯。在您的问题中,您说您已经异步实现了此功能,但您对此不满意 - 您更喜欢同步解决方案。我没有看到架构不支持同步的任何确认。
  • @String 我不高兴,因为它不是请求-响应 API。我使用一种方法在一个地方发送请求,然后 hope 接收带有响应的消息。我想要上面的 sn-p 中的东西(+- Future 包装器)
  • 并进一步澄清:我有类似维亚切斯拉夫在下面写的东西。我只是不喜欢它,我可能会包装 API.. 除非 Android 提供请求-响应 API。

标签: java android wear-os android-wear-2.0


【解决方案1】:

我不确定你尝试了什么。

但是这段代码应该可以发送一个字节数组。

Wearable.MessageApi.sendMessage(googleApiClient, transcriptionNodeId,
            VOICE_TRANSCRIPTION_MESSAGE_PATH, voiceData).setResultCallback(
                  new ResultCallback() {
                      @Override
                      public void onResult(SendMessageResult sendMessageResult) {
                          if (!sendMessageResult.getStatus().isSuccess()) {
                              // Failed to send message
                          }
                      }
                  }
            );

voiceData 是一个简单的字节数组。该阵列将被可穿戴设备和手持设备接收。

https://developer.android.com/training/wearables/data-layer/messages.html

要检索数据,请使用:

@Override
public void onMessageReceived(MessageEvent messageEvent) {
    if (messageEvent.getPath().equals(YOUR_TEXT)) {
        messageEvent.getData();//this is your byte array
    }
}

【讨论】:

  • 嗯,但响应在哪里?
  • 您的代码正是我在问题中所描述的 - 我这样做了,它有效,我不喜欢它,我正在寻找一个更面向请求响应的 API :) 但还是谢谢!
  • 这是最快的解决方案。
  • 最快?
  • 有两种方法可以帮助传输数据。另一种方法是使用 Wea​​rable.DataApi。但也有一些缺点:大件物体的传输时间很长
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多