Android 可穿戴设备:如何使用 DataApi 获取当前变量?
Android Wearable: how to get a current variable using 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");
}
});
如何在不使用侦听器模式的情况下读取与 KEY_DATA
关联的 dataValue
?我需要这个,因为有时即使设置了紧急模式,节点也不会同步。特别是只有在值发生变化时才会调用 onDataChanged 回调。
这是一个场景:安装了一个移动apk,在启动时它在KEY_DATA
项上写了一个值。安装可穿戴 apk 后,我将侦听器设置为接收此值,但未调用数据更改事件,因此我需要一种通过显式轮询获取当前值的方法。
我知道还有 MessageApi,但问题是一样的,如果设备不在线,消息就会丢失。
您可以使用此处记录的 getDataItems
方法之一从 DataApi
检索以前的值:https://developers.google.com/android/reference/com/google/android/gms/wearable/DataApi.html
有多种形式,具体取决于您希望 API 在 return 向您发送数据之前执行的过滤。最简单的形式如下所示:
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);
}
}
}
});
并将 return 您的应用已发送到 API 的所有 DataItem
。您可以访问上述 KEY_DATA
值。
这是基于事件的代码
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");
}
});
如何在不使用侦听器模式的情况下读取与 KEY_DATA
关联的 dataValue
?我需要这个,因为有时即使设置了紧急模式,节点也不会同步。特别是只有在值发生变化时才会调用 onDataChanged 回调。
这是一个场景:安装了一个移动apk,在启动时它在KEY_DATA
项上写了一个值。安装可穿戴 apk 后,我将侦听器设置为接收此值,但未调用数据更改事件,因此我需要一种通过显式轮询获取当前值的方法。
我知道还有 MessageApi,但问题是一样的,如果设备不在线,消息就会丢失。
您可以使用此处记录的 getDataItems
方法之一从 DataApi
检索以前的值:https://developers.google.com/android/reference/com/google/android/gms/wearable/DataApi.html
有多种形式,具体取决于您希望 API 在 return 向您发送数据之前执行的过滤。最简单的形式如下所示:
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);
}
}
}
});
并将 return 您的应用已发送到 API 的所有 DataItem
。您可以访问上述 KEY_DATA
值。