繁体   English   中英

使用Message API Android识别消息

[英]Identify Messages using Message API Android

我可能有一个简单的问题,但我很困惑。 对于我的Android Wear应用程序,我有两个工作的传感器(计步器和心跳),然后Wear应用程序将这些值发送回移动应用程序。 我正在使用Message API发送它们。 我的stepcount sendMessage()和心率sendMessage()方法看起来相同。 这是我令人发指的sendMessage方法。

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

我尝试将字节数组传递给Heartrate sendMessage()和其他字符串作为标志,以便我可以区分这些值,但是没有运气。 任何人都知道最好的方法是什么?

任何帮助,将不胜感激。

干杯

看来您是在path属性内发送数据。 这不是此参数的正确用法。

让我们看一下MessageApi.sendMessage(GoogleApiClient client, String nodeId, String path, byte[] data方法。

您想要做的是使用String path为您的消息提供标识符,例如,在您的情况下为step_counterheartbeat 这样,您可以在收到消息时在另一侧识别它。

传感器数据应进入data字段。 您可以将其原始放置在那里,但是更好的方法是创建一个DataMap ,然后将其序列化为byte[] 这样,您以后可以轻松充实数据。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM