Что такое Uri для Wearable.DataApi.getDataItem () после использования PutDataMapRequest?

Я тестирую Wearable Data Layer 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(...); 

Теперь я хочу проверить, правильно ли были сохранены эти данные (для тестирования на самом КПК я сейчас не беспокоюсь о пригодности для носки). Соответствующие методы для этого относятся к классу DataApi , поэтому я могу позвонить:

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

А затем используйте DataMapItem.fromDataItem() внутри обратного вызова, чтобы получить значение.

Проблема заключается в следующем: каков фактический Uri для запроса DataItemResult?

Данные хранятся, потому что, если я использую Wearable.DataApi.getDataItems(mGoogleApiClient) для итерации по всем сохраненным данным, это действительно так, и Uri:

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

И использование этого Uri с DataApi.getDataItem() возвращает правильный результат. Но я не знаю, как сгенерировать его, так как я использовал /testdata часть /testdata для создания PutDataRequest

Или я делаю что-то неправильно?

Solutions Collecting From Web of "Что такое Uri для Wearable.DataApi.getDataItem () после использования PutDataMapRequest?"

Власть ури (которая в вашем сообщении называется <some guid here>) – это идентификатор узла , доступный через 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; }