15

我正在测试Android 教程中描述的Wearable Data Layer Api

有一个基于的低级API DataItem,它只能有一个字节数组作为payload,所以培训推荐使用,在使用Intents时PutDataMapRequest似乎基本等价于一个(即可序列化的map)。Bundle您基本上创建了此类的一个实例,然后填充值并发送它。

private final static String DATA_PATH = "/testdata";

PutDataMapRequest dataMap = PutDataMapRequest.create(DATA_PATH);
dataMap.getDataMap().putInt(...);

PutDataRequest request = dataMap.asPutDataRequest();
PendingResult<DataApi.DataItemResult> pendingResult = Wearable.DataApi.putDataItem(mGoogleApiClient, request);
pendingResult.setResultCallback(...);

现在,我想检查这些数据是否存储正确(为了测试,在手持设备本身上,我现在不关心可穿戴设备)。适当的方法在DataApi类中,所以我可以调用:

PendingResult<DataApi.DataItemResult> pending;
pending = Wearable.DataApi.getDataItem(mGoogleApiClient, uri);
pending.setResultCallback(...);

然后DataMapItem.fromDataItem()在回调内部使用来获取值。

问题是:请求 DataItemResult 的实际 Uri 是什么?

数据被存储,因为如果我Wearable.DataApi.getDataItems(mGoogleApiClient)用来遍历所有存储的数据,它确实在那里,并且 Uri 是:

"wear://<some guid here>/testdata"

并使用此 UriDataApi.getDataItem()返回正确的结果。但我对如何生成它一无所知,因为我只使用该/testdata部分来创建PutDataRequest...

还是我做错了?

4

1 回答 1

24

uri 的权限(在您的帖子中描述为 <some guid here>)是Node Id,可通过Node API获得。总之,您可以按如下方式构建 Uri。

private Uri getUriForDataItem() {
    // If you've put data on the local node
    String nodeId = getLocalNodeId();
    // Or if you've put data on the remote node
    // String nodeId = getRemoteNodeId();
    // Or If you already know the node id
    // String nodeId = "some_node_id";
    return new Uri.Builder().scheme(PutDataRequest.WEAR_URI_SCHEME).authority(nodeId).path("/path_to_data").build();
}

private String getLocalNodeId() {
    NodeApi.GetLocalNodeResult nodeResult = Wearable.NodeApi.getLocalNode(mGoogleApiClient).await();
    return nodeResult.getNode().getId();
}

private String getRemoteNodeId() {
    HashSet<String> results = new HashSet<String>();
    NodeApi.GetConnectedNodesResult nodesResult =
            Wearable.NodeApi.getConnectedNodes(mGoogleApiClient).await();
    List<Node> nodes = nodesResult.getNodes();
    if (nodes.size() > 0) {
        return nodes.get(0).getId();
    }
    return null;
}
于 2014-07-07T09:20:11.590 回答