【发布时间】:2020-02-21 12:30:25
【问题描述】:
我正在尝试使用 Wearable.MessageApi 从我的 Android Wear 应用程序向我的手机应用程序发送一条简单的消息。
这是我在 Wear 设备上来自 GoogleApiClient 的 onConnected 回调。
final PendingResult<Status> status = Wearable.DataApi.addListener(googleApiClient, this);
status.setResultCallback(new ResultCallback<Status>() {
@Override
public void onResult(Status status) {
if (!status.isSuccess()) {
return;
}
NodeApi.GetConnectedNodesResult nodes =
Wearable.NodeApi.getConnectedNodes(googleApiClient).await();
for (Node node : nodes.getNodes()) {
System.out.println("Sending message: " + node.getDisplayName());
final MessageApi.SendMessageResult result =
Wearable.MessageApi.sendMessage(googleApiClient, node.getId(),
"request", "12345".getBytes())
.await();
System.out.println("sent: " + result.getStatus().isSuccess());
}
}
});
运行时显示以下内容
Sending message: Nexus 6P
sent: true
这是我在应用上注册的服务:
public class MyWearableListenerService extends WearableListenerService {
@Override
public void onMessageReceived(MessageEvent messageEvent) {
Toast.makeText(this, "Received message", Toast.LENGTH_LONG).show();
}
@Override
public void onPeerConnected(Node peer) {
Toast.makeText(this, "Peer connected", Toast.LENGTH_LONG).show();
}
}
我正确验证了当模拟器连接到我的设备时,Peer connected toast 正在显示。我正确地进行了端口转发以在磨损模拟器上进行调试。我检查了我的 applicationId 和包名称在我的应用程序和 Wear 应用程序中是否一致。但是,我从来没有在我的设备上收到onMessageReceived 回调。
非常感谢任何建议!我已经调试了一整天了:(
【问题讨论】:
-
请看一下这个要点。它可以帮助您解决问题gist.github.com/schwiz/84f14c94d4a95c3b77be
-
感谢分享。我已经根据您的要点检查了所有内容,唯一的区别是我尝试将消息从磨损发送到设备,而您尝试将消息从设备发送到磨损。不过,我认为这不会影响任何事情。
-
好的。让我们做点魔法吧。尝试在两台设备上手动卸载您的应用 apk .. 并再次测试
-
试过了,没有运气:(在两个设备上都卸载并重新安装(首先是应用程序,然后是磨损).. gah,很确定它只是一些配置混乱导致消息被丢弃。我希望有更多的日志记录:\
-
请查看这个库。它对于 WearbleApi 来说有点薄 github.com/Mariuxtheone/Teleport 它的源代码可能对你有帮助
标签: android wear-os android-wear-data-api