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 值。