2017-02-15 16 views
0

У меня есть флеш-накопитель со спутником для телефона. Он использует Wearable.DataApi для синхронизации изменений между телефоном и часами. У меня есть настройки DataApi.DataListener и изменения синхронизации, сделанные на стороне часов или телефона. У меня нет проблем с телефоном и ОДНЫМ часом, общающимся.Носимая проблема синхронизации данныхAPI с несколькими часами (Looping)

Вопрос, когда у меня есть несколько часов, использующих такое же лицо для часов, если изменения на часах или на телефоне сделаны быстро, кажется, что они входят в цикл и начинают мигать об изменениях на всех устройствах. Поэтому, если я меняю цвет, нажимая на часы, если я нажимаю несколько раз быстро, чтобы все устройства начали циклически перемещаться по всем краскам и занимают некоторое время, прежде чем он настигнет и остановится.

Если я медленно меняю параметры, проблем нет. Я помещаю журнал в прослушиватель 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(); 
     } 
    }; 

ответ

0

Вы должны быть в состоянии избежать этого, отфильтровывая dataEvents, вытекающей из локальный узел (т. е. устройство, в котором работает код).

Получить локальный идентификатор узла с кодом, как это:

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; 
} 
+0

Это работает единственное, что я не «Это похоже на то, что на устройстве происходят задержки, потому что он вносит изменения в другие узлы, а затем отправляет изменения обратно оригиналу, внося изменения. небольшая цена, чтобы заплатить, чтобы заставить ее работать. благодаря! – Bignadad

 Смежные вопросы

  • Нет связанных вопросов^_^