这是基于事件的代码
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 :(得分:0)
您可以使用此处记录的DataApi
方法之一从getDataItems
检索以前的值:https://developers.google.com/android/reference/com/google/android/gms/wearable/DataApi.html
根据您在向您返回数据之前要执行的过滤,有多种形式。最简单的形式如下:
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);
}
}
}
});
并将返回您的应用发送给API的所有DataItem
个。您可以访问上面列出的KEY_DATA
值。