获取已从手持设备发送到穿戴设备的数据

Get data already sent from handheld to wear

我已经从手机发送数据到 wear as

    private static final String IMAGE_PATH = "/image";
    private static final String IMAGE_TITLE = "imageTitle";
    private static final String IMAGE_TO_SEND = "image";


    PutDataMapRequest putDataMapRequest = PutDataMapRequest.create(IMAGE_PATH);
    putDataMapRequest.getDataMap().putString(IMAGE_TITLE, "hi this handheld");
    PutDataRequest putDataRequest = putDataMapRequest.asPutDataRequest();
    putDataRequest.setUrgent();
    Wearable.DataApi.putDataItem(googleApiClient, putDataRequest).setResultCallback(new ResultCallback<DataApi.DataItemResult>() {
        @Override
        public void onResult(@NonNull DataApi.DataItemResult dataItemResult) {
            if (dataItemResult.getStatus().isSuccess()) {

            } else {

            }
        }
    });

在磨损方面,我想先检查数据是否已经发送。如果数据已经发送,那么我想使用该数据,否则我想请求移动数据:

我做到了,但总是失败。我的代码如下:

 Wearable.NodeApi.getLocalNode(googleApiClient).setResultCallback(new ResultCallback<NodeApi.GetLocalNodeResult>() {
            @Override
            public void onResult(@NonNull NodeApi.GetLocalNodeResult getLocalNodeResult) {
                Uri uri = new Uri.Builder()
                        .scheme(PutDataRequest.WEAR_URI_SCHEME)
                        .path(IMAGE_PATH)
                        .authority(getLocalNodeResult.getNode().getId())
                        .build();

                Wearable.DataApi.getDataItem(googleApiClient, uri).setResultCallback(new ResultCallback<DataApi.DataItemResult>() {
                    @Override
                    public void onResult(@NonNull DataApi.DataItemResult dataItemResult) {
                        if (dataItemResult.getStatus().isSuccess() && dataItemResult.getDataItem() != null) {
                            Log.d(TAG, "onResult: success result");
                            DataMap dataMap = DataMap.fromByteArray(dataItemResult.getDataItem().getData());

                        } else {

                        }
                    }
                });
            }
        });

您的代码看起来不错,节点 ID 是否非空?

是否在 getDataItem 结果回调时失败?

要从 DataItemResult 获取 DataMap,请使用此代码:

DataItem dataItem = dataItemResult.getDataItem();
if (dataItem != null) {
       DataMap dataMap = DataMapItem.fromDataItem(dataItem).getDataMap();

}

我找到了解决方案。我通过获取 local nodes id 检查数据,因此它提供空 data.Local Node id i-e 我手表的 id,Node Id 必须是已发送数据的节点的 id使用数据层 Api。在我的例子中,首先我的手持设备通过 Data Layer Api 发送数据,我的手表检查数据是否存在或 not.If 找到的数据获取数据,否则向手持设备发送请求。

Wearable.NodeApi.getConnectedNodes(googleApiClient).setResultCallback(new ResultCallback<NodeApi.GetConnectedNodesResult>() {
                @Override
                public void onResult(NodeApi.GetConnectedNodesResult nodes) {
                    for (Node node : nodes.getNodes()) {
                        connectedNode = node;
                    }

                    Uri uri = new Uri.Builder()
                            .scheme(PutDataRequest.WEAR_URI_SCHEME)
                            .path(IMAGE_PATH)
                            .authority(connectedNode.getId()) //id which has sent data
                            .build();

                    Wearable.DataApi.getDataItem(googleApiClient, uri).setResultCallback(new ResultCallback<DataApi.DataItemResult>() {
                        @Override
                        public void onResult(@NonNull DataApi.DataItemResult dataItemResult) {
                            if (dataItemResult.getStatus().isSuccess() && dataItemResult.getDataItem() != null) {
                                Log.d(TAG, "onResult: successfully got previous data");
                            } else {
                                makeRequestToSendData();
                                Log.d(TAG, "onResult: failed to got previous data");//request handheld to get data using **Message API**
                            }
                        }
                    });

                }
            });

我们必须将 getLocalNode 更改为 getConnectedNodes