2017-02-15 40 views
0

我有一個手機伴侶應用程序的表面。它使用Wearable.DataApi同步手機和手錶之間的變化。我有一個DataApi.DataListener設置,並在手錶或手機端進行同步更改。 我有一個電話和一個手錶通信沒有問題。可穿戴DataAPI同步問題與多個手錶(循環)

問題是當我有多個手錶使用相同的錶盤時,如果手錶或手機側的變化很快進行,它似乎進入循環並開始閃爍所有設備上的變化。所以,如果我通過點擊手錶來改變顏色,如果我快速按幾次,所有設備都會開始騎自行車穿過所有顏色,並且需要一段時間才能趕上和停止。

如果我慢慢更改選項沒有問題。我在DataApi監聽器中添加了一個日誌,並且我看到了兩個uri都在進行更改,但是由於某種原因,快速更改時似乎會出現循環。無論如何要防止這一點?

我知道這可能不是一個大問題,但如果用戶有2個手錶並意外快速更改選項或選項,它將從選項和/或顏色更改開始。我想防止這種情況發生。

這是怎麼IM在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是源於避免這種本地節點(即代碼運行的設備)。

獲取本地節點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; 
} 
+0

這不工作的唯一的東西我不不喜歡這樣做的原因是設備進行更改時會有延遲,因爲它會在其他節點上進行更改,然後將更改發回原始進行更改。儘管付出的代價很小。謝謝! – Bignadad