gpt4 book ai didi

java - Android Wear 与手机通信

转载 作者:行者123 更新时间:2023-12-01 08:54:43 25 4
gpt4 key购买 nike

我正在为 Wear 创建一个应用程序,该应用程序有一个手机配套应用程序来执行一些较繁重的流程并进行 API 调用。

到目前为止,关于两个设备之间的通信,我一直在遵循本教程 - http://android-wear-docs.readthedocs.io/en/latest/data.html

这让我的手机能够与 watch 进行通信,但现在我想知道如何以其他方式复制它。

我在 Wear 应用程序上的当前代码如下(手机和 watch 上也存在单独的监听器类):

public void sendTestMessage(View view)
{
String WEARABLE_DATA_PATH = "/wearable_data";
DataMap dataMap = new DataMap();
dataMap.putString("WATCH2PHONE TEST MESSAGE EVENT!", "1");
new SendToDataLayerThread(WEARABLE_DATA_PATH, dataMap).start();
}

class SendToDataLayerThread extends Thread
{
String path;
DataMap dataMap;

SendToDataLayerThread(String p, DataMap data)
{
path = p;
dataMap = data;
}

public void run()
{
PutDataMapRequest putDMR = PutDataMapRequest.create(path);
putDMR.getDataMap().putAll(dataMap);
PutDataRequest request = putDMR.asPutDataRequest();
DataApi.DataItemResult result = Wearable.DataApi.putDataItem(googleClient, request).await();

if (result.getStatus().isSuccess())
{
Log.v("myTag", "DataMap: " + dataMap + " sent successfully to data layer ");
}

else
{
Log.v("myTag", "ERROR: failed to send DataMap to data layer");
}
}
}

监听器类( watch ,手机版本相同):

public class ListenerService extends WearableListenerService
{
@Override
public void onDataChanged(DataEventBuffer dataEvents)
{
DataMap dataMap;
for (DataEvent event : dataEvents)
{
Log.v("myTag", "DataMap received on device: " + DataMapItem.fromDataItem(event.getDataItem()).getDataMap());
}
}
}

因此,发送测试消息会将消息发送到层,并且它们会发送,但会被 watch 的监听器服务接收。

我假设“String WEARABLE_DATA_PATH = “/wearable_data”;”是什么导致它最终被 watch 接收,但我不确定将其更改为什么才能使其正确发送。

最佳答案

数据 API 在两个方向上的工作方式相同。在手持设备上使用的具体架构取决于您的应用程序的结构,但文档中的选项有很好的概述:https://developer.android.com/training/wearables/data-layer/events.html#Listen .

该页面还讨论了使用路径来过滤接收到的数据事件。同样,这取决于您的架构,但使用 "/data_from_handheld""/data_from_wearable" 等路径来区分不同方向的 DataItem 可能是合理的。或者您可以使用相同的路径,然后数据事件将出现在所有连接的设备上 - 这可能是也可能不是您想要的。

另一个常见的“陷阱”:数据 API 事件仅在数据实际发生更改时触发。这是 API 处理现实世界通信的有效方法,但可能会使开发变得困难。要强制执行此操作,只需包含一个始终不同的项目,例如:

dataMap.putLong("timestamp", System.nanoTime());

...但请务必在部署应用程序之前将其删除!

关于java - Android Wear 与手机通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42116405/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com