Android 使用PutDataMapRequest后,Wearable.DataApi.getDataItem()的Uri是什么?
我正在测试可穿戴数据层Api,如中所述 有一个基于around的低级API,它只能有一个字节数组作为有效负载,因此培训建议使用,在使用Intents时,它似乎基本上相当于一个Android 使用PutDataMapRequest后,Wearable.DataApi.getDataItem()的Uri是什么?,android,wear-os,android-wear-data-api,Android,Wear Os,Android Wear Data Api,我正在测试可穿戴数据层Api,如中所述 有一个基于around的低级API,它只能有一个字节数组作为有效负载,因此培训建议使用,在使用Intents时,它似乎基本上相当于一个包(即可序列化的映射)。您基本上是创建这个类的一个实例,然后填充值并发送它 private final static String DATA_PATH = "/testdata"; PutDataMapRequest dataMap = PutDataMapRequest.create(DATA_PATH); dataMa
包(即可序列化的映射)。您基本上是创建这个类的一个实例,然后填充值并发送它
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(...);
然后在回调中使用DataMapItem.fromDataItem()
来获取值
问题是:请求DataItemResult的实际Uri是什么?
数据是存储的,因为如果我使用迭代所有存储的数据,它确实在那里,Uri是:
"wear://<some guid here>/testdata"
”wear:///testdata"
并将此Uri与DataApi.getDataItem()
一起使用,返回正确的结果。但是我不知道如何生成它,因为我只使用/testdata
部分来创建PutDataRequest
还是我做的不对?uri的权限(在您的帖子中描述)是节点Id,可通过节点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;
}
private Uri getUriForDataItem(){
//如果已将数据放在本地节点上
字符串nodeId=getLocalNodeId();
//或者如果您已将数据放在远程节点上
//字符串nodeId=getRemoteNodeId();
//或者如果您已经知道节点id
//String nodeId=“some\u node\u id”;
返回新的Uri.Builder().scheme(PutDataRequest.WEAR_Uri_scheme).authority(nodeId.path(“/path_to_data”).build();
}
私有字符串getLocalNodeId(){
NodeApi.GetLocalNodeResult nodeResult=Wearable.NodeApi.getLocalNode(mGoogleApiClient.await();
返回nodeResult.getNode().getId();
}
私有字符串getRemoteNodeId(){
HashSet results=新的HashSet();
NodeApi.GetConnectedNodeResult NodeResult=
Wearable.NodeApi.getConnectedNodes(mgoogleapClient.wait();
List nodes=nodesResult.getNodes();
如果(nodes.size()>0){
返回nodes.get(0.getId();
}
返回null;
}
完美!我没见过这个。我假设每个连接的设备都有自己的节点id?是的。节点id和项目url在本视频中也有提及。是的,我看了你的答案后看到了那个视频。再次感谢!实际上,节点可以省略。如果仅使用方案和路径,则将检索包含给定路径上所有DataItem
元素的DataItemBuffer
。然后你可以遍历它们。这在远程设备上对我不起作用。。。在设备上创建项目,但在另一个设备上不工作。但我在远程设备上接收到onDataChanged事件。我的URI似乎是正确的(用于获取数据项的URI与从onDataChanged中的事件中获取的URI相同)。有什么建议吗?附加信息:由于我无法让Android Studio为一个移动项目工作,我正在使用eclipse开发智能手机部分,但对于磨损部分,我使用Android Studio。
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;
}