gpt4 book ai didi

wear-os - Wearable MessageAPI onMessageReceived 从未命中,不同的设备 ID

转载 作者:行者123 更新时间:2023-12-02 18:51:04 29 4
gpt4 key购买 nike

尝试从模拟移动设备向模拟穿戴设备发送消息。我可以通过 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");
}

我已经阅读了所有与此类似的问题,但没有看到有人提到不同的设备 ID。我已经三次检查移动设备和穿戴设备之间的 applicationId 和依赖项是否相同。

更新:

如果取消配对 Wear 模拟器并运行 Wearable.NodeApi.getLocalNode 我仍然会返回一个 nodeId,而 Wearable.NodeApi.getConnectedNodes 则不会,这让我相信getConnectedNodes 是我应该使用的。

此外,关闭 Wear 模拟器仍然会返回 getLocalNode 的已连接节点 ID,这让我相信它会返回 watch 以外的其他内容。

最佳答案

首先,不要使用 onPeerConnected 等已弃用的方法。始终使用 CapabilityApi 方法。这太糟糕了!

我有一个问题。您使用哪种 Android Wear APK(手持设备)文件?难道你不知道现代版本的 Android Wear APK 没有用吗?它们无法正常工作。

如果您使用旧版本的 API,您必须了解 CapabilityApi 等现代 API 不起作用。

现在,不可能在模拟可穿戴设备和模拟手持设备之间建立稳定的连接。其中之一必须是真实设备。

我可以建议的唯一解决方案是测试您在真实可穿戴和手持设备上的应用。

始终使用最新的 GoogleServices 库进行测试、使用真实设备、使用未弃用的 API。

在发布之前降低 GoogleServices 库版本,以使您的应用适用于未更新的设备。

在我的实践中,模拟器的工作方式非常奇怪。

关于wear-os - Wearable MessageAPI onMessageReceived 从未命中,不同的设备 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45593915/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com