【问题标题】:Android Mobile/Wear App onMessageReceived Called Multiple Times for One MessageAndroid Mobile/Wear App onMessageReceived 为一条消息多次调用
【发布时间】:2014-07-11 16:27:27
【问题描述】:

我有一个基本的 Android Wear 应用程序,它成功地使用可穿戴数据层在移动设备和 Wear 之间发送和接收消息。

但是,每当我(从移动设备或 Wear 设备)发送消息时,另一端都会多次收到消息(例如 5-17 的任何时间)。为什么不是只收到一次?据我所知,它只发送一次。

成功连接后,这是我的发送消息代码(两端相同):

private void sendMsgToWear(final String strMsg){

    new AsyncTask<Void, Void, List<Node>>(){

        @Override
        protected List<Node> doInBackground(Void... params) {
            return getNodes();
        }

        @Override
        protected void onPostExecute(List<Node> nodeList) {
            for(Node node : nodeList) {
                Log.v("DEVELOPER", "......Phone: Sending Msg: " + strMsg + " to node:  " + node.getId());

                PendingResult<MessageApi.SendMessageResult> result = Wearable.MessageApi.sendMessage(
                        mGoogleApiClient,
                        node.getId(),
                        strMsg,
                        null
                );

                result.setResultCallback(new ResultCallback<MessageApi.SendMessageResult>() {
                    @Override
                    public void onResult(MessageApi.SendMessageResult sendMessageResult) {
                        Log.v("DEVELOPER", "......Phone: " + sendMessageResult.getStatus().getStatusMessage());
                    }
                });
            }
        }
    }.execute();


}

private List<Node> getNodes() {
    List<Node> nodes = new ArrayList<Node>();
    NodeApi.GetConnectedNodesResult rawNodes =
            Wearable.NodeApi.getConnectedNodes(mGoogleApiClient).await();
    for (Node node : rawNodes.getNodes()) {
        nodes.add(node);
        nodeID = node.getId();
    }
    return nodes;
}

这是我在实现 MessageApi.MessageListener 的活动上接收的方式:

@Override
public void onMessageReceived(MessageEvent messageEvent) {

    Log.d("DEVELOPER", "......Wear: successfully received phone to wear communication!");


}

我在发送端的输出如下所示:

07-11 10:54:57.646  26920-28711/com.wearTest.message V/DEVELOPER﹕ ......Phone: Sending Msg: testMessage to node:  6ecc099a-60f8-4c3d-90fe-fa2f248c6bf7
07-11 10:54:57.666  26920-26920/com.wearTest.message V/DEVELOPER﹕ ......Phone: null

以及接收端日志:

07-11 10:54:57.962    5509-5672/com.wearTest.message D/DEVELOPER﹕ ......Wear: successfully received phone to wear communication!
07-11 10:54:57.962    5509-5610/com.wearTest.message D/DEVELOPER﹕ ......Wear: successfully received phone to wear communication!
07-11 10:54:57.962    5509-5660/com.wearTest.message D/DEVELOPER﹕ ......Wear: successfully received phone to wear communication!
07-11 10:54:57.962    5509-5521/com.wearTest.message D/DEVELOPER﹕ ......Wear: successfully received phone to wear communication!
07-11 10:54:57.962    5509-5539/com.wearTest.message D/DEVELOPER﹕ ......Wear: successfully received phone to wear communication!
07-11 10:54:57.972    5509-5570/com.wearTest.message D/DEVELOPER﹕ ......Wear: successfully received phone to wear communication!
07-11 10:54:57.972    5509-5604/com.wearTest.message D/DEVELOPER﹕ ......Wear: successfully received phone to wear communication!
07-11 10:54:57.972    5509-5601/com.wearTest.message D/DEVELOPER﹕ ......Wear: successfully received phone to wear communication!
07-11 10:54:57.972    5509-5566/com.wearTest.message D/DEVELOPER﹕ ......Wear: successfully received phone to wear communication!
07-11 10:54:57.972    5509-5520/com.wearTest.message D/DEVELOPER﹕ ......Wear: successfully received phone to wear communication!
07-11 10:54:57.972    5509-5582/com.wearTest.message D/DEVELOPER﹕ ......Wear: successfully received phone to wear communication!
07-11 10:54:57.972    5509-5567/com.wearTest.message D/DEVELOPER﹕ ......Wear: successfully received phone to wear communication!
07-11 10:54:57.982    5509-5587/com.wearTest.message D/DEVELOPER﹕ ......Wear: successfully received phone to wear communication!
07-11 10:54:58.002    5509-5581/com.wearTest.message D/DEVELOPER﹕ ......Wear: successfully received phone to wear communication!
07-11 10:54:58.052    5509-5581/com.wearTest.message D/DEVELOPER﹕ ......Wear: successfully received phone to wear communication!
07-11 10:54:58.052    5509-5587/com.wearTest.message D/DEVELOPER﹕ ......Wear: successfully received phone to wear communication!
07-11 10:54:58.062    5509-5570/com.wearTest.message D/DEVELOPER﹕ ......Wear: successfully received phone to wear communication!

提前致谢!

【问题讨论】:

  • 以防万一,您是否检查过您只注册了一次接收方?
  • 啊,谢谢马蒂亚什!白骨移动,就是这样。
  • 我很高兴这很容易。 :) 你打算删除这个问题,还是我应该添加一个答案?
  • 继续添加一个让我接受的答案...它将为其他可怜的灵魂节省一小时徒劳的工作!

标签: android message wear-os


【解决方案1】:

MessageApi 应该可以正常工作。请注意只拨打一次addListener(),否则您会收到多次通知。

或者,添加匹配的 removeListener() 调用(例如在 onResume() / onPause() 中)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-18
    • 2023-04-08
    • 2019-09-19
    • 1970-01-01
    • 2011-04-04
    • 2019-11-24
    • 1970-01-01
    相关资源
    最近更新 更多