Wear os 可穿戴DataAPI与多个手表同步问题(循环)

Wear os 可穿戴DataAPI与多个手表同步问题(循环),wear-os,android-wear-data-api,Wear Os,Android Wear Data Api,我有一个手表和一个手机配套应用程序。它使用Wearable.DataApi在手机和手表之间同步更改。我有一个DataApi.DataListener设置,并在手表或手机端同步更改我没有手机和手表通信的问题 问题是当我有多个手表使用同一个表面时,如果手表或手机侧的变化很快,它似乎进入一个循环,并开始在所有设备上闪烁变化。因此,如果我通过点击手表来改变颜色,如果我快速按下几次,所有设备开始在所有颜色之间循环,并且需要一些时间才能赶上并停止 如果我慢慢地改变选项,就没有问题了。我在DataApi侦听器

我有一个手表和一个手机配套应用程序。它使用Wearable.DataApi在手机和手表之间同步更改。我有一个DataApi.DataListener设置,并在手表或手机端同步更改我没有手机和手表通信的问题

问题是当我有多个手表使用同一个表面时,如果手表或手机侧的变化很快,它似乎进入一个循环,并开始在所有设备上闪烁变化。因此,如果我通过点击手表来改变颜色,如果我快速按下几次,所有设备开始在所有颜色之间循环,并且需要一些时间才能赶上并停止

如果我慢慢地改变选项,就没有问题了。我在DataApi侦听器中放置了一个日志,我看到两个uri都在进行更改,但在快速更改时,由于某些原因似乎会循环。有没有办法防止这种情况发生

我知道这似乎不是什么大问题,但如果用户有两块手表,并且不小心快速更改了一个或多个选项,那么它将从更改选项和/或颜色开始。我想防止这种情况发生

这就是我在onConnected方法中添加侦听器的方式

 Wearable.DataApi.addListener(mGoogleApiClient, dataListener);
这是我的监听方法

DataApi.DataListener dataListener = new DataApi.DataListener() {
        @Override
        public void onDataChanged(DataEventBuffer dataEvents) {
            Log.d(TAG, "onDataChanged");

            for (DataEvent event : dataEvents) {
                Log.d(TAG, "dataEvent.uri: " + event.getDataItem().getUri().toString());

                DataMap item = DataMapItem.fromDataItem(event.getDataItem()).getDataMap();

               /////other code to set data/////

            }
            updateCanvas();
        }
    };

您应该能够通过过滤掉源自本地节点(即运行代码的设备)的
dataEvents
来避免这种情况

使用如下代码获取本地节点ID:

NodeApi.GetLocalNodeResult nodeResult = Wearable.NodeApi.getLocalNode(googleApiClient).await();
String localNodeID = getLocalNodeResult.getNode().getId();
然后,将这样的代码放入
for
循环中进行过滤:

Uri uri = item.getUri();
String nodeID = uri.getHost();
if (nodeID.equals(localNodeID)) {
    // Skip changes originating on this device
    continue;
}

这确实有效。我唯一不喜欢的是,在进行更改的设备上存在延迟,因为它在其他节点上进行更改,然后将更改发送回进行更改的原始设备。不过,要让它发挥作用所付出的代价很小。谢谢