未在设备上调用WearableListenerService onMessageReceived

时间:2015-11-20 01:46:05

标签: android wear-os android-wear-data-api

我正在尝试使用Wearable.MessageApi从我的Android Wear应用程序向我的手机应用程序发送一条简单信息。

这是我在Google设备上使用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吐司正在显示。我正确地将端口转发到磨损模拟器上进行调试。我检查了我的applicationId和包名在我的应用程序和穿戴应用程序中是否一致。但是,我从未在设备上收到onMessageReceived回调。

非常感谢任何建议!我一直在调试这一整天:(

3 个答案:

答案 0 :(得分:7)

哦,天哪。我弄清楚了我的问题。我认为applicationId是一样的,但事实证明我从未在wear模块上设置构建风格,因此两个applicationIds实际上是com.example.androidcom.example.android.dev ..

希望这可以帮助遇到与我相同问题的其他人:\

答案 1 :(得分:0)

由于Android开发者网站上的(非常)糟糕且过时的文档,我遇到了同样的问题。我正在将Wear应用程序添加到已有多年的现有应用程序中。因此,多年来,我一直在主应用程序中使用自定义的debug.keystore。

制作Wear应用程序时,我没有将build.gradle更新为使用与常规应用程序相同的debug.keystore文件-完成后,我开始从Watch-> Phone接收消息!

如果您遇到与我和OP相同的问题,请查看以下清单:

  1. Wear和Phone应用程序需要相同的applicationId
  2. 应用之间的versionNumber和versionName相同
  3. 使用相同的密钥签名(这是解决我的问题的方法)

我刚刚将应用程序的build.gradle的“ signingConfigs”部分复制到了磨损应用程序的build.gradle

signingConfigs { debug { storeFile file('../app/debug.keystore') } }

这个问题使我花了一整天的时间,希望其他人觉得这很有用。

答案 2 :(得分:0)

在WearableListenerService中的另一个可能的陷阱是,不要忘记对super的调用:

@Override
public void onCreate() {
    super.onCreate(); // <-- don't forget this
    ...
}