2014-07-06 3 views
14

Ich teste die tragbare Datenschicht Api wie in der Android tutorial beschrieben.Was ist der Uri für Wearable.DataApi.getDataItem() nach der Verwendung von PutDataMapRequest?

Es gibt einen niedrigen Level-API auf Basis DataItem, der nur einen Byte-Array als Nutzlast haben kann, so dass die Ausbildung empfiehlt PutDataMapRequest verwenden, der im Grunde äquivalent zu einer Bundle (das heißt eine serializable Karte) zu sein scheint, wenn Intents verwenden. Sie erstellen im Grunde eine Instanz dieser Klasse, füllen dann die Werte und senden sie.

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(...); 

Jetzt möchte ich, wenn diese Daten gespeichert wurden korrekt (zum Testen, auf dem Handheld selbst, ich bin nicht besorgt über die tragbare jetzt) ​​überprüfen. Die entsprechenden Methoden hierfür sind in der DataApi Klasse, so dass ich anrufen:

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

und dann DataMapItem.fromDataItem() innerhalb des Callback verwenden, um den Wert zu erhalten.

Das Problem ist: Was ist die tatsächliche Uri, um das DataItemResult anzufordern?

die Daten gespeichert sind, denn wenn ich Wearable.DataApi.getDataItems(mGoogleApiClient) verwenden, um über alle gespeicherten Daten durchlaufen, es ist in der Tat da, und die Uri ist:

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

Und mit diesem Uri mit DataApi.getDataItem() kehrt das richtige Ergebnis . Aber ich bin ratlos, wie zu es erzeugen, da ich nur verwendet, um den /testdata Teil der PutDataRequest zu schaffen ...

Oder bin ich Dinge falsch gemacht?

Antwort

23

Die Autorität des uri (die als < einige guid hier > in Ihrem Beitrag beschrieben wird) ist Node Id die über Node API verfügbar ist. Zusammenfassend können Sie den Uri wie folgt konstruieren.

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; 
} 
+0

Perfekt! Ich hatte das nicht gesehen. Und ich nehme an, jedes angeschlossene Gerät hat seine eigene Knoten-ID? – matiash

+0

Ja ist es. Knoten-ID und Element-URL werden auch in diesem Video ein wenig erwähnt. https://www.google.com/events/io/schedule/session/9bf77f55-afbe-e311-b297-00155d5066d7 – Poly

+0

Ja, ich sah das Video, nachdem ich Ihre Antwort gelesen habe. Danke noch einmal! – matiash

Verwandte Themen