0

這是基於事件的代碼Android可穿戴設備:如何使用DataApi獲取當前變量?

Wearable.DataApi.addListener(googleApiClient, new DataApi.DataListener() { 
     @Override 
     public void onDataChanged(DataEventBuffer dataEvents) { 
      Log.i(tag, "on data changed " + dataEvents.toString()); 
      for (DataEvent event : dataEvents) { 
       DataItem item = event.getDataItem(); 
       String path = item.getUri().getPath(); 
       if (path.equals(PATH_MAP)) { 
        DataMap dataMap = DataMapItem.fromDataItem(item).getDataMap(); 
        String dataValue = dataMap.getString(KEY_DATA); 
       } 
      } 
     } 
    }).setResultCallback(new ResultCallbacks<Status>() { 
     @Override 
     public void onSuccess(@NonNull Status status) { 
      Log.i(tag, "success"); 
     } 

     @Override 
     public void onFailure(@NonNull Status status) { 
      Log.i(tag, "failure"); 
     } 
    }); 

如何閱讀dataValue關聯KEY_DATA不使用監聽器模式?我需要這樣做,因爲即使設置了緊急模式,有時節點也不會同步。特別是onDataChanged回調只有在值發生變化時才被調用。

這是一個場景:已經安裝了手機apk,在啓動時它會在KEY_DATA項上寫入一個值。在穿戴apk安裝之後,我將偵聽器設置爲接收此值,但未調用數據更改事件,所以我需要一種方法以顯式輪詢獲取當前值。

我知道還有MessageApi,但問題是一樣的,如果一個設備不在線,則消息丟失。

回答

0

您可以使用這裏記錄的getDataItems方法之一檢索來自DataApi以前的值:https://developers.google.com/android/reference/com/google/android/gms/wearable/DataApi.html

有依賴於該濾波您想要的API將數據返回到您之前做各種形式。最簡單的形式是這樣的:

Wearable.DataApi.getDataItems(googleApiClient).setResultCallback(new ResultCallback<DataItemBuffer>() { 
    @Override 
    public void onResult(@NonNull DataItemBuffer buffer) { 
     for (DataItem item : buffer) { 
      if (item.getUri().getPath().equals(PATH_MAP)) { 
       DataMap dataMap = DataMapItem.fromDataItem(item).getDataMap(); 
       String dataValue = dataMap.getString(KEY_DATA); 
      } 
     } 
    } 
}); 

將返回所有DataItem是你的應用程序已經發送到API。如上所述,您可以訪問KEY_DATA值。

+0

我有一個地圖路徑,而不是項目 – user3290180

+0

我應該如何獲得我的KEY_DATA值? – user3290180

相關問題