Android Wearable:如何使用DataApi获取当前变量?

时间:2016-07-15 18:32:44

标签: android synchronization wear-os android-wear-data-api

这是基于事件的代码

    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,但问题是一样的,如果设备不在线,邮件就会丢失。

1 个答案:

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