将消息发送到 android 设备,设备将消息发送回 android wear,但接收时永远不会在 wear 上触发

Send message to android device, which sends message back to android wear, but on received is never triggered on wear

我正在为 android 编写一个应用程序,它与设备通信并返回到穿戴设备。这是onclick on wear的代码。

 message1Button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Wearable.MessageApi.sendMessage(apiClient, remoteNodeId, MESSAGE1_PATH, null).setResultCallback(new ResultCallback<MessageApi.SendMessageResult>() {
                @Override
                public void onResult(MessageApi.SendMessageResult sendMessageResult) {
                    Intent intent = new Intent(getApplicationContext(), ConfirmationActivity.class);
                    if (sendMessageResult.getStatus().isSuccess()) {

                        intent.putExtra(ConfirmationActivity.EXTRA_ANIMATION_TYPE, ConfirmationActivity.SUCCESS_ANIMATION);
                        intent.putExtra(ConfirmationActivity.EXTRA_MESSAGE, getString(R.string.message1_sent));
                    } else {
                        intent.putExtra(ConfirmationActivity.EXTRA_ANIMATION_TYPE, ConfirmationActivity.FAILURE_ANIMATION);
                        intent.putExtra(ConfirmationActivity.EXTRA_MESSAGE, getString(R.string.error_message1));
                    }
                    startActivity(intent);
                }
            });

The following is the code for on received on Handheld device.

 public void onMessageReceived(MessageEvent messageEvent) {
            if (messageEvent.getPath().equals(MESSAGE1_PATH)) {
                handler.post(new Runnable() {
                    @Override
                    public void run() {
                        receivedMessagesEditText.append("\n" + getString(R.string.received_message1));
                        String serverURL = "A Working URL";
                        try {
                            ArrayList<String> list=new ArrayList<String>();
                            list.add(0,serverURL);
                            list.add(1,"SELECT DISTINCT ACCOUNTNO FROM CUSTOMR_WISE_WALLET_POINTS ORDER BY ACCOUNTNO");
                            jsonContent= new LongOperation().execute(list).get();
                        } catch (InterruptedException e) {
                            Log.e("Error",e.getMessage());
                            e.printStackTrace();
                        } catch (ExecutionException e) {
                            e.printStackTrace();
                        }

                        Log.d("Value of json",jsonContent);

                    }
                });
                Wearable.MessageApi.sendMessage(apiClient, remoteNodeId, MESSAGE4_PATH, jsonContent.getBytes()).setResultCallback(new ResultCallback<MessageApi.SendMessageResult>() {
                    @Override
                    public void onResult(MessageApi.SendMessageResult sendMessageResult) {
                        if (sendMessageResult.getStatus().isSuccess())
                            Toast.makeText(getApplication(), "Message 4 sent", Toast.LENGTH_SHORT).show();
                        else
                            Toast.makeText(getApplication(), getString(R.string.error_message1), Toast.LENGTH_SHORT).show();
                    }
                });
            } else if (messageEvent.getPath().equals(MESSAGE2_PATH)) {
                handler.post(new Runnable() {
                    @Override
                    public void run() {
                        receivedMessagesEditText.append("\n" + getString(R.string.received_message2));
                    }
                });
            }
        }

手持设备显示 "Message 4 sent" toast。但是 wear 上的消息侦听器永远不会 triggered.The code for which is.

messageListener = new MessageApi.MessageListener() {
        @Override
        public void onMessageReceived(final  MessageEvent messageEvent) {
            Log.d("Inside","On message recieved");
            if (messageEvent.getPath().equals(MESSAGE1_PATH)) {
                handler.post(new Runnable() {
                    @Override
                    public void run() {
                        receivedMessagesEditText.append("\n" + getString(R.string.received_message1));
                        /*COde to send another request*/
                        Wearable.MessageApi.sendMessage(apiClient, remoteNodeId, MESSAGE3_PATH, "Hello".getBytes()).setResultCallback(new ResultCallback<MessageApi.SendMessageResult>() {
                            @Override
                            public void onResult(MessageApi.SendMessageResult sendMessageResult) {
                                Intent intent = new Intent(getApplicationContext(), ConfirmationActivity.class);
                                if (sendMessageResult.getStatus().isSuccess()) {
                                    intent.putExtra(ConfirmationActivity.EXTRA_ANIMATION_TYPE, ConfirmationActivity.SUCCESS_ANIMATION);
                                    intent.putExtra(ConfirmationActivity.EXTRA_MESSAGE, "Message 3 sent");
                                } else {
                                    intent.putExtra(ConfirmationActivity.EXTRA_ANIMATION_TYPE, ConfirmationActivity.FAILURE_ANIMATION);
                                    intent.putExtra(ConfirmationActivity.EXTRA_MESSAGE, getString(R.string.error_message2));
                                }
                                startActivity(intent);
                            }
                        });


                    }
                });
            } else if (messageEvent.getPath().equals(MESSAGE2_PATH)) {
                handler.post(new Runnable() {
                    @Override
                    public void run() {
                        receivedMessagesEditText.append("\n" + getString(R.string.received_message2));
                    }
                });
            }
            else if(messageEvent.getPath().equals(MESSAGE4_PATH)){

                handler.post(new Runnable() {
                    @Override
                    public void run() {
                        receivedMessagesEditText.append("\n" + getString(R.string.received_message1));
                        /*COde to send another request*/

                       // String jsonInString=new String(messageEvent.getData());
                        Log.d("Inside Message 4","Inside");
                        String[] items = new String[]{"Select User", "2", "three"};
                        ArrayAdapter<String> adapter = new ArrayAdapter<String>(getApplicationContext(), android.R.layout.simple_spinner_dropdown_item, items);
                        dropdown.setAdapter(adapter);
                        message2Button.setEnabled(true);

                    }
                });

            }
        }
    };

总而言之,我可以从 wear 发送消息并触发 handled 上收到的消息。消息已从手持设备成功发送,但当从 messagelistener 范围内调用时,收到的消息不会在佩戴时触发。我检查了应用程序 ID,它们 same.I 还测试了通过使用来自 handheld.It 的 button2 触发在佩戴时收到的消息,效果很好。提前致谢

MessageApi 不保证即使返回成功的结果代码也会收到消息。检查文档 here.

Note: A successful result code does not guarantee delivery of the message. If your app requires data reliability, use DataItem objects or the ChannelApi class to send data between devices.