我正在测试可穿戴数据层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
......
或者我做错了什么?
答案 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;
}