使用 Message API Android 识别消息
Identify Messages using Message API Android
我可能有一个简单的问题,但让我很困惑。对于我的 Android Wear 应用程序,我有两个传感器在工作(计步器和心率)。然后,Wear 应用程序将这些值发送回移动应用程序。我正在使用消息 API 发送它们。我的步数 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() 和其他字符串,以便我可以区分这些值,但没有成功。任何人都知道解决这个问题的最佳方法是什么?
如有任何帮助,我们将不胜感激。
干杯
看来您是在路径属性中发送数据。这不是该参数的正确用法。
我们来看看MessageApi.sendMessage(GoogleApiClient client, String nodeId, String path, byte[] data
方法
您想要做的是使用 String path
为您的消息提供标识符,例如在您的情况下它将是 step_counter
和 heartbeat
。这样您就可以在收到消息时在另一端识别它。
传感器数据应进入 data
字段。您可以将其原始放在那里,但更好的方法是创建一个 DataMap
,然后将其序列化为 byte[]
。这样您以后可以轻松丰富数据。
我可能有一个简单的问题,但让我很困惑。对于我的 Android Wear 应用程序,我有两个传感器在工作(计步器和心率)。然后,Wear 应用程序将这些值发送回移动应用程序。我正在使用消息 API 发送它们。我的步数 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() 和其他字符串,以便我可以区分这些值,但没有成功。任何人都知道解决这个问题的最佳方法是什么?
如有任何帮助,我们将不胜感激。
干杯
看来您是在路径属性中发送数据。这不是该参数的正确用法。
我们来看看MessageApi.sendMessage(GoogleApiClient client, String nodeId, String path, byte[] data
方法
您想要做的是使用 String path
为您的消息提供标识符,例如在您的情况下它将是 step_counter
和 heartbeat
。这样您就可以在收到消息时在另一端识别它。
传感器数据应进入 data
字段。您可以将其原始放在那里,但更好的方法是创建一个 DataMap
,然后将其序列化为 byte[]
。这样您以后可以轻松丰富数据。