获取已从掌上电脑发送的数据

时间:2016-03-17 11:54:34

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

我已将手机数据发送至

    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 {

                        }
                    }
                });
            }
        });

2 个答案:

答案 0 :(得分:2)

我找到了解决方案。我通过获取本地节点id 来检查数据,因此它提供了空数据。我的手表的本地节点ID i-e id,Node Id必须是使用数据层Api发送数据的节点的id。在我的情况下,我的掌上电脑首先通过Data Layer Api发送数据,我的监视检查数据是否存在。如果找到的数据得到数据,否则发送请求到手持设备。

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

答案 1 :(得分:0)

您的代码看起来很好,节点ID是否为空?

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

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

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

}