mat*_*ash 15 android android-wear-data-api wear-os
我正在测试可穿戴数据层Api,如Android教程中所述.
有一个低级API DataItem,它只能有一个字节数组作为有效负载,因此训练建议使用PutDataMapRequest,这似乎基本上等于Bundle使用Intents时的(即可序列化的映射).您基本上创建了此类的实例,然后填充值并发送它.
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(...);
Run Code Online (Sandbox Code Playgroud)
现在,我想检查这些数据是否存储正确(对于测试,在掌上电脑本身,我现在不关心可穿戴设备).适当的方法是在DataApi课堂上,所以我可以打电话:
PendingResult<DataApi.DataItemResult> pending;
pending = Wearable.DataApi.getDataItem(mGoogleApiClient, uri);
pending.setResultCallback(...);
Run Code Online (Sandbox Code Playgroud)
然后DataMapItem.fromDataItem()在回调内部使用以获取值.
问题是:请求DataItemResult的实际Uri是什么?
存储数据,因为如果我使用Wearable.DataApi.getDataItems(mGoogleApiClient)迭代所有存储的数据,它确实存在,并且Uri是:
"wear://<some guid here>/testdata"
Run Code Online (Sandbox Code Playgroud)
并使用此Uri DataApi.getDataItem()返回正确的结果.但我对如何生成它一无所知,因为我只使用该/testdata部件来创建PutDataRequest...
或者我做错了什么?
Pol*_*oly 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;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4747 次 |
| 最近记录: |