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

时间:2017-02-15 05:05:16

标签: wear-os android-wear-data-api

我有一个带有配套手机应用程序的表盘。它使用Wearable.DataApi来同步手机和手表之间的变化。我有一个DataApi.DataListener设置和手表或手机端的同步更改。 我对手机和ONE手表通信没有任何问题

问题当我有多个手表使用相同的表盘时,如果手表或手机端的更改很快就会进入循环并开始在所有设备上闪烁更改。因此,如果我通过点击手表来改变颜色,如果我快速按几次,那么所有设备都会开始循环使用所有颜色,并且需要一些时间才能赶上并停止。

如果我慢慢更改选项,则没有问题。我在DataApi监听器中放了一个日志,我看到两个uri正在进行更改,但由于某些原因,当快速更改时似乎循环。反正有没有阻止这个?

我知道这可能不是一个大问题但是如果用户有2个手表并且意外地快速更改选项或选项,它将从选项和/或颜色变化开始。我想防止这种情况发生。

这是我在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();
        }
    };

1 个答案:

答案 0 :(得分:0)

您应该能够通过过滤掉源自本地节点的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;
}