2014-07-06 1 views
14

Je suis en train de tester la couche Wearable Data Layer Api comme décrit dans le Android tutorial.Quel est le Uri pour Wearable.DataApi.getDataItem() après avoir utilisé PutDataMapRequest?

Il y a une API de bas niveau basé autour DataItem, qui ne peut avoir qu'un tableau d'octets que la charge utile, de sorte que la formation recommande l'utilisation PutDataMapRequest, ce qui semble être essentiellement équivalente à un Bundle (à savoir une carte sérialisable) lors de l'utilisation Intentions. Vous créez essentiellement une instance de cette classe, puis remplissez les valeurs et envoyez-la.

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

Maintenant, je veux vérifier si ces données ont été stockées correctement (pour les tests, sur l'ordinateur de poche lui-même, je ne suis pas préoccupé par le portable en ce moment). Les méthodes appropriées pour ce sont dans la classe DataApi, donc je peux appeler:

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

puis utilisez DataMapItem.fromDataItem() dans la fonction de rappel pour obtenir la valeur.

Le problème est: Quel est l'Uri réel pour demander le DataItemResult?

Les données sont stockées, parce que si je l'utilise Wearable.DataApi.getDataItems(mGoogleApiClient) itérer sur toutes données stockées, il est bien là, et Uri est:

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

et d'utiliser ce Uri avec DataApi.getDataItem() renvoie le résultat correct . Mais je suis désemparés quant à la façon de générer, puisque je ne ai utilisé la partie /testdata pour créer le PutDataRequest ...

Ou suis-je en train de faire les choses correctement?

Répondre

23

autorité de la uri (qui est décrit comme < certains guid ici > dans votre post) est Node Id qui est disponible via API nœud. En résumé, vous pouvez construire l'Uri comme suit.

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

Parfait! Je n'avais pas vu ça. Et je suppose que chaque périphérique connecté a son propre identifiant de noeud? – matiash

+0

Oui c'est. L'identifiant de noeud et l'URL de l'objet sont également mentionnés dans cette vidéo. https://www.google.com/events/io/schedule/session/9bf77f55-afbe-e311-b297-00155d5066d7 – Poly

+0

Oui, j'ai vu cette vidéo après avoir lu votre réponse. Merci encore! – matiash

Questions connexes