Hal
Hal

Reputation: 105

Identify Messages using Message API Android

I have probably a simple question but has me stumped. For my Android Wear application, I have two sensors working (step counter and heartrate).The wear app then sends these values back to the mobile application. I am sending them using the Message API. My stepcount sendMessage() and heartrate sendMessage() method look the same. Here is my heartrate sendMessage method.

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);
                    }
                }
            }
        });

    }

Problem is I am only using one messageReceived method on the mobile. So I cant differentiate from the step value coming in or the heartrate value coming in.

@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);
            }
        }

I tried passing in a byte array into the Heartrate sendMessage() and other strings as flags so that I could tell the values apart but no luck. Anyone know what the best way to go about this would be?

Any help would be appreciated.

Cheers

Upvotes: 0

Views: 256

Answers (1)

gruszczy
gruszczy

Reputation: 42188

It seems you are sending the data inside the path attribute. This is not the correct use of this parameter.

Let's take a look at the MessageApi.sendMessage(GoogleApiClient client, String nodeId, String path, byte[] data method.

What you want to do is use String path to provide identifier for your message, for example in your case it would be step_counter and heartbeat. This way you can identify it on the other side, when you receive the message.

The sensor data should go into data field. You can put it raw there, but a better way is to create a DataMap and then serialize it into byte[]. This way you can enrich the data later easily.

Upvotes: 1

Related Questions