将消息从Android Wear发送到主机设备

 雨舒紫_586 发布于 2023-01-06 10:45

我正在编写一个自定义Android Wear应用程序,该应用程序应该向连接的主机设备(电话)发送一次性消息.通过API,我发现以下教程应该运行良好:http://developer.android.com/training/wearables/data-layer/messages.html

我的Android应用程序有一个WearableListenerService,我的Android Wear应用程序使用Message API触发消息.在模拟器基于记录以下方法进行连接时调用WearableListenerService get,所以我很确定该服务连接正常

@Override
public void onPeerConnected(Node peer) {
    super.onPeerConnected(peer);

    String id = peer.getId();
    String name = peer.getDisplayName();

    Log.d(LOG_TAG, "Connected peer name & ID: " + name + "|" + id);
}

日志输出:

/AndroidWearListenerService(19892): Connected peer name & ID: facdc219-37f5-4326-8fa6-1c8b8d3b6669|facdc219-37f5-4326-8fa6-1c8b8d3b6669

但是,onMessageReceived方法永远不会被触发:

@Override
public void onMessageReceived(MessageEvent messageEvent) {
    Log.d(LOG_TAG, "MessageEvent received: " + messageEvent.getData());
    //do work
}

这是我的Android Wear代码.我删除了大部分锅炉板代码,只留下必要的位

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_my);

    final GoogleApiClient googleApiClient = new GoogleApiClient.Builder(this)
            .addApi(Wearable.API)
            .build();

    googleApiClient.connect();

    final WatchViewStub stub = (WatchViewStub) findViewById(R.id.watch_view_stub);
    stub.setOnLayoutInflatedListener(new WatchViewStub.OnLayoutInflatedListener() {
        @Override
        public void onLayoutInflated(WatchViewStub stub) {
            fireMessage();
        }

        private void fireMessage() {
            // Send the RPC
            PendingResult nodes = Wearable.NodeApi.getConnectedNodes(googleApiClient);
            nodes.setResultCallback(new ResultCallback() {
                @Override
                public void onResult(NodeApi.GetConnectedNodesResult result) {
                    for (int i = 0; i < result.getNodes().size(); i++) {
                        Node node = result.getNodes().get(i);
                        String nName = node.getDisplayName();
                        String nId = node.getId();
                        Log.d(TAG, "Node name and ID: " + nName + " | " + nId);

                        Wearable.MessageApi.addListener(googleApiClient, new MessageApi.MessageListener() {
                            @Override
                            public void onMessageReceived(MessageEvent messageEvent) {
                                Log.d(TAG, "Message received: " + messageEvent);
                            }
                        });

                        PendingResult messageResult = Wearable.MessageApi.sendMessage(googleApiClient, node.getId(),
                                PATH, null);
                        messageResult.setResultCallback(new ResultCallback() {
                            @Override
                            public void onResult(MessageApi.SendMessageResult sendMessageResult) {
                                Status status = sendMessageResult.getStatus();
                                Log.d(TAG, "Status: " + status.toString());
                                if (status.getStatusCode() != WearableStatusCodes.SUCCESS) {
                                    alertButton.setProgress(-1);
                                    label.setText("Tap to retry. Alert not sent :(");
                                }
                            }
                        });
                    }
                }
            });
        }
    });
}

记录似乎表明消息已成功发送,但Android应用程序的WearableListenerService.onMessageReceived永远不会触发.

D/MyWearApp MyActivity( 2014): Node name and ID: a2ba665d-a559-4a95-91d2-c16fc7873e28 | a2ba665d-a559-4a95-91d2-c16fc7873e28
D/MyWearApp MyActivity( 2014): Status: Status{statusCode=SUCCESS, resolution=null}

有任何想法吗?

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有