Data Items是用於同步手機和wear的數據接口,一個Date Items通常包括下面幾部分:
Payload
一個字節數組,你可以設置任何需要的數據類型,允許進行對象的序列化與反序列化,大小不能超過100k。
Path
唯一的字符串,必須以正斜槓開始(例如,“/path/to/ data”)
通常不需要直接實現DataItem,只需要:
1、創建PutDataRequest對象,指定一個路徑字符串區別該item
2、調用setData()設置payload
3、調用DataApi.putDataItem(),請求系統創建一個data item
4、當請求data item時候,系統會返回一個正確的實現了接口的data item對象
使用setData()使用原始字節,建議使用一個data map,可以暴露一個易於使用的類似於bundle的數據
使用Data Map同步數據
如果可以的話,使用DataMap類,可以使用data items類似Bundle,而且兌現序列化和反序列化幫你完成,你可以操作數據使用鍵值對。
使用data map 的步驟
1 創建PutDataMapRequest對象,設置data item的路徑
2 調用 PutDataMapRequest.getDataMap()創建data
map,可以設置數據
3 設置需要的數據使用put...()方法,如
putString()
4
調用
PutDataMapRequest.asPutDataRequest()創建
PutDataRequest對象
5
調用
DataApi.putDataItem()
請求系統創建data
item
如果手機與wear沒有連接,則緩存等到連接後同步
如下代碼所示
PutDataMapRequest dataMap = PutDataMapRequest.create("/count");
dataMap.getDataMap().putInt(COUNT_KEY, count++);
PutDataRequest request = dataMap.asPutDataRequest();
PendingResult<DataApi.DataItemResult> pendingResult = Wearable.DataApi
.putDataItem(mGoogleApiClient, request);
監聽Data Item時間
如果一方數據層使data item發生變化,你可能需要去通知任何變化的數據連接,你可以實現這些通過時間一個監聽data item的事件,下面是個例子。
@Override
public void onDataChanged(DataEventBuffer dataEvents) {
for (DataEvent event : dataEvents) {
if (event.getType() == DataEvent.TYPE_DELETED) {
Log.d(TAG, "DataItem deleted: " + event.getDataItem().getUri());
} else if (event.getType() == DataEvent.TYPE_CHANGED) {
Log.d(TAG, "DataItem changed: " + event.getDataItem().getUri());
}
}
}