2015-04-27 143 views
0

我可能有一個簡單的問題,但讓我難住。對於我的Android Wear應用程序,我有兩個傳感器可用(步數計數器和心率)。Wear應用程序然後將這些值發送回移動應用程序。我使用Message API發送它們。我的stepcount sendMessage()和heartrate sendMessage()方法看起來是一樣的。這是我心中的sendMessage方法。使用消息API識別消息Android

private void sendMessageToHandheld(final String message) { 

     if (mGoogleApiClient == null) 
      return; 

     Log.d(LOG_TAG,"sending a message to handheld: "+message); 

     // use the api client to send the heartbeat value to our handheld 
     final PendingResult<NodeApi.GetConnectedNodesResult> nodes = Wearable.NodeApi.getConnectedNodes(mGoogleApiClient); 
     nodes.setResultCallback(new ResultCallback<NodeApi.GetConnectedNodesResult>() { 
      @Override 
      public void onResult(NodeApi.GetConnectedNodesResult result) { 
       final List<Node> nodes = result.getNodes(); 
       if (nodes != null) { 
        for (int i=0; i<nodes.size(); i++) { 
         final Node node = nodes.get(i); 
         Wearable.MessageApi.sendMessage(mGoogleApiClient, node.getId(), message, bytes); 
        } 
       } 
      } 
     }); 

    } 

問題是我只在移動設備上使用一個messageReceived方法。所以我不能從步驟值在未來或心率值在未來進行區分。

@Override 
    public void onMessageReceived(MessageEvent messageEvent) { 
     super.onMessageReceived(messageEvent); 
     Log.d(LOG_TAG, "received a message from wear: " + messageEvent.getPath()); 
     if (messageEvent.getPath().contains("HEARTBEAT")){ 
      // save the new heartbeat value 
      currentValue = Integer.parseInt(messageEvent.getPath()); 
      if(handler!=null) { 
       // if a handler is registered, send the value as new message 
       Log.d(LOG_TAG, "received a heartbeat message from wear: " + messageEvent.getPath()); 
       handler.sendEmptyMessage(currentValue); 
      } 
     } 
     else { 
      // save the new steps value 
      currentStepValue = Integer.parseInt(messageEvent.getPath()); 
      if (handler != null) { 
       // if a handler is registered, send the value as new message 
       Log.d(LOG_TAG, "received a step message from wear: " + messageEvent.getPath()); 
       handler.sendEmptyMessage(currentStepValue); 
      } 
     } 

我試圖傳遞一個字節數組到心率的sendMessage()和其它字符串作爲標誌,這樣我可以分辨的值但沒有運氣。任何人都知道最好的方法是什麼?

任何幫助,將不勝感激。

乾杯

回答

1

看來你是發送路徑屬性中的數據。這不是這個參數的正確用法。

讓我們來看看MessageApi.sendMessage(GoogleApiClient client, String nodeId, String path, byte[] data方法。

你想要做的是用String path爲你的信息提供標識符,例如你的情況是step_counterheartbeat。當你收到信息時,你可以在另一邊識別它。

傳感器數據應進入data字段。您可以將它放在那裏,但更好的方法是創建一個DataMap,然後將其序列化爲byte[]。這樣您可以輕鬆地在後期豐富數據。

+0

非常感謝gruszczy,現在實際上是有道理的。這正是我需要做的,你將如何去訪問移動端的數據映射?例如,我使用messageEvent.getData()嗎? – Hal

+0

這就是你正在看的東西:'DataMap.fromByteArray(messageEvent.getData());'。打開API並閱讀各種方法。即使你不瞭解所有的東西,它會給你一個概述,並使之後更容易找到答案。 – gruszczy

+0

完美!會做。再次感謝gruszczy。非常感激 – Hal