WearableListenerService onMessageReceived 未在设备上调用
WearableListenerService onMessageReceived is not called on device
我正在尝试使用 Wearable.MessageApi
从我的 Android wear 应用向我的 phone 应用发送一条简单消息。
这是我在 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
回调。
非常感谢任何建议!我已经调试了一整天:(
哦,天哪..我想出了我的问题。我以为 applicationId 是一样的,但事实证明我从来没有在 wear 模块上设置构建风格,所以这两个 applicationId 实际上是 com.example.android
和 com.example.android.dev
..
希望这可以帮助 运行 和我遇到同样问题的其他人:\
由于 Android 开发者网站上的文档(非常)糟糕且过时,我遇到了同样的问题。我正在将 Wear 应用程序添加到已经存在多年的现有应用程序。因此,多年来我一直在我的主应用程序中使用自定义 debug.keystore。
当我制作 Wear 应用程序时,我没有更新 build.gradle 以使用与常规应用程序相同的 debug.keystore 文件 - 一旦我这样做,我就开始从手表接收消息 - > Phone!
如果您遇到与我和 OP 相同的问题,请查看以下清单:
- Wear 和 Phone 应用需要相同的 applicationId
- 应用程序之间的版本号和版本名相同
- 由相同的密钥签名(这是解决我的问题的方法)
我刚刚将 "signingConfigs" 部分从我的应用 build.gradle 复制到 Wear 应用的 build.gradle
signingConfigs {
debug {
storeFile file('../app/debug.keystore')
}
}
这个问题花了我一整天的时间,希望其他人觉得这有用。
另一个可能的陷阱,在你的 WearableListenerService 中,不要忘记调用 super:
@Override
public void onCreate() {
super.onCreate(); // <-- don't forget this
...
}
我正在尝试使用 Wearable.MessageApi
从我的 Android wear 应用向我的 phone 应用发送一条简单消息。
这是我在 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
回调。
非常感谢任何建议!我已经调试了一整天:(
哦,天哪..我想出了我的问题。我以为 applicationId 是一样的,但事实证明我从来没有在 wear 模块上设置构建风格,所以这两个 applicationId 实际上是 com.example.android
和 com.example.android.dev
..
希望这可以帮助 运行 和我遇到同样问题的其他人:\
由于 Android 开发者网站上的文档(非常)糟糕且过时,我遇到了同样的问题。我正在将 Wear 应用程序添加到已经存在多年的现有应用程序。因此,多年来我一直在我的主应用程序中使用自定义 debug.keystore。
当我制作 Wear 应用程序时,我没有更新 build.gradle 以使用与常规应用程序相同的 debug.keystore 文件 - 一旦我这样做,我就开始从手表接收消息 - > Phone!
如果您遇到与我和 OP 相同的问题,请查看以下清单:
- Wear 和 Phone 应用需要相同的 applicationId
- 应用程序之间的版本号和版本名相同
- 由相同的密钥签名(这是解决我的问题的方法)
我刚刚将 "signingConfigs" 部分从我的应用 build.gradle 复制到 Wear 应用的 build.gradle
signingConfigs {
debug {
storeFile file('../app/debug.keystore')
}
}
这个问题花了我一整天的时间,希望其他人觉得这有用。
另一个可能的陷阱,在你的 WearableListenerService 中,不要忘记调用 super:
@Override
public void onCreate() {
super.onCreate(); // <-- don't forget this
...
}