使用PutDataMapRequest后,Wearable.DataApi.getDataItem()的Uri是什么?

时间:2014-07-06 23:21:35

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

我正在测试可穿戴数据层Api ,如Android tutorial中所述。

有一个基于DataItem的低级API,它只能有一个字节数组作为有效负载,因此培训建议使用PutDataMapRequest,这似乎基本等同于{{1}使用Intents时(即可序列化的映射)。您基本上创建了此类的实例,然后填充值并发送它。

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(...); 来获取值。

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

存储数据,因为如果我使用Wearable.DataApi.getDataItems(mGoogleApiClient)迭代所有存储的数据,它确实存在,并且Uri是:

DataMapItem.fromDataItem()

将此Uri与"wear://<some guid here>/testdata" 一起使用会返回正确的结果。但我对如何生成这一点毫无头绪,因为我只使用DataApi.getDataItem()部分来创建/testdata ......

或者我做错了什么?

1 个答案:

答案 0 :(得分:24)

uri的权限(在您的帖子中描述为&lt; some guid&gt;) 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;
}