【发布时间】:2018-01-17 12:49:34
【问题描述】:
尝试从模拟移动设备向模拟穿戴设备发送消息。我可以通过 Android Wear 应用配对穿戴设备,并验证穿戴设备的 onPeerConnected 是否已命中(onMessageReceived 未命中)。
使用两个代码版本返回node.getId()会导致穿戴设备的两个不同的ID。
运行这个:
new Thread(new Runnable() {
@Override
public void run() {
NodeApi.GetLocalNodeResult nodes = Wearable.NodeApi.getLocalNode(mGoogleApiClient).await();
Node node = nodes.getNode();
MessageApi.SendMessageResult result = Wearable.MessageApi.sendMessage(mGoogleApiClient, node.getId(), "Hello Watch 1", null).await();
if (!result.getStatus().isSuccess()) {
Log.e(getPackageName(), "error");
} else {
Log.i(getPackageName(), "success!!!! sent to: " + node.getId());
}
}
}).start
返回:08-09 10:24:33.106 17914-18007/com.wear.myapp I/com.wear.myapp:成功!!!!发送至:223faf0e
运行这个:
new Thread(new Runnable() {
@Override
public void run() {
NodeApi.GetConnectedNodesResult nodes = Wearable.NodeApi.getConnectedNodes(mGoogleApiClient).await();
for (Node node : nodes.getNodes()) {
MessageApi.SendMessageResult result = Wearable.MessageApi.sendMessage(mGoogleApiClient, node.getId(), "Hello Watch 2", null).await();
if (!result.getStatus().isSuccess()) {
Log.e(getPackageName(), "error");
} else {
Log.i(getPackageName(), "success!!!! sent to: " + node.getId());
}
}
}
}).start();
返回:08-09 10:24:33.108 17914-18006/com.wear.myapp I/com.wear.streamer:成功!!!!发送至:3a000c12
即使在穿戴设备的假节点 ID 中进行陌生人硬编码,仍然会在日志中返回成功消息。感觉我得到了一个假阳性结果。
WearableListenerService:
@Override
public void onMessageReceived(MessageEvent messageEvent) {
Log.i(getPackageName(), "Message received");
}
@Override
public void onPeerConnected(Node peer) {
Log.i(getPackageName(), "Peer connected");
}
我已经阅读了与此类似的所有 SO 问题,但没有看到有人提到不同的设备 ID。我反复检查了移动设备和 Wear 之间的 applicationId 和依赖项是否相同。
更新:
如果取消配对 Wear 模拟器并运行 Wearable.NodeApi.getLocalNode,我仍然会返回一个 nodeId,而 Wearable.NodeApi.getConnectedNodes 没有,这让我相信 getConnectedNodes 是我应该使用的。
此外,关闭 Wear 模拟器仍会返回 getLocalNode 的连接节点 ID,这让我相信它返回的不是手表。
【问题讨论】:
标签: wear-os android-wear-data-api