【问题标题】:Android WearableListenerService has to be called twice to receive MessageAndroid WearableListenerService 必须被调用两次才能接收消息
【发布时间】:2015-01-04 05:17:38
【问题描述】:

我正在从我的 Wear 向我的手持设备发送一条消息。 我第一次单击手持设备上的按钮时只是调用服务的 onCreate 方法,第二次服务也接收到消息。我无法弄清楚问题所在。

这是我的穿戴部分:

    @Override
    public void onClick(View v)
    {
        final PendingResult<NodeApi.GetConnectedNodesResult> nodes1 = Wearable.NodeApi.getConnectedNodes(mApiClient);
        nodes1.setResultCallback(new ResultCallback<NodeApi.GetConnectedNodesResult>()
        {
            @Override
            public void onResult(NodeApi.GetConnectedNodesResult result)
            {
                for (int i = 0; i < result.getNodes().size(); i++)
                {
                    Node node = result.getNodes().get(i);

                    PendingResult<MessageApi.SendMessageResult> messageResult = Wearable.MessageApi.sendMessage(mApiClient, node.getId(), "/OPEN;"
                            + cnt, null);
                    messageResult.setResultCallback(new ResultCallback<MessageApi.SendMessageResult>()
                    {
                        @Override
                        public void onResult(MessageApi.SendMessageResult sendMessageResult)
                        {
                            Status status = sendMessageResult.getStatus();
                            Log.d("", "##Status: " + status.toString());
                            if (status.getStatusCode() != WearableStatusCodes.SUCCESS)
                            {
                                //not getting there, always success
                            }
                        }
                    });
                }
            }
        });
    }

我有以下 WearableListenerService:

public class DataLayerListenerService extends WearableListenerService implements ConnectionCallbacks, OnConnectionFailedListener
{
    private GoogleApiClient mApiClient;
    private SharedPreferences prefs;

    @Override
    public void onCreate()
    {
        Log.d("", "##DataService created");
        super.onCreate();
        if (null == mApiClient)
        {
            mApiClient = new GoogleApiClient.Builder(this).addApi(Wearable.API).addConnectionCallbacks(this).addOnConnectionFailedListener(this)
                    .build();
        }

        if (!mApiClient.isConnected())
        {
            mApiClient.connect();
            Log.d("", "##Api connecting");
        }
    }

    @Override
    public void onDestroy()
    {
        Log.d("", "##DataService destroyed");
        if (null != mApiClient)
        {
            if (mApiClient.isConnected())
            {
                mApiClient.disconnect();
            }
        }
        super.onDestroy();
    }

    @Override
    public void onMessageReceived(MessageEvent messageEvent)
    {
        Log.d("", "##DataService received " + messageEvent.getPath());
        super.onMessageReceived(messageEvent);
        if (messageEvent.getPath().contains("/OPEN;"))
        {
            // only if called twice :(
        }
    }

    @Override
    public void onDataChanged(DataEventBuffer dataEvents)
    {
        Log.d("", "##DataService Data changed");
    }


    @Override
    public void onConnectionFailed(ConnectionResult arg0)
    {
    }

    @Override
    public void onConnected(Bundle arg0)
    {
    }

    @Override
    public void onConnectionSuspended(int arg0)
    {
    }
}

也许我还应该提到,当服务之前被破坏时,我只需要单击按钮两次,这发生在单击事件后几秒钟。 所以..事实上这就是发生的事情:

佩戴点击

服务创建

佩戴点击

服务 onMessageReceived

佩戴点击

服务 onMessageReceived

//等待几秒钟

服务销毁

佩戴点击

服务创建

佩戴点击

服务 onMessageReceived

希望这很清楚:-)

提前致谢!!

【问题讨论】:

  • 您是否尝试过 DataLayer SDK 示例? listenerService 部分没有扩展 ConnectionCallbacks、OnConnectionFailedListener 接口。你的连接回调方法可能没有用,因为你总是可以通过调用 api 客户端的 isConnected() 方法来检查连接。只有可穿戴部分扩展了这两个接口。另外,您的 onDestroy() 方法断开了 api 客户端,也许这就是您需要单击两次的原因。

标签: android service message watch


【解决方案1】:

我想我可能已经解决了 Phillip Adam - 尝试在调用超类的 onMessageReceived() 方法中注释掉服务中的行。这对我来说成立。 :)

【讨论】:

    【解决方案2】:

    我一直在搞砸这个问题,如果您仍然遇到第一次尝试时未触发侦听器服务的错误,我发现增加超时间隔会有所帮助。我将我的设置为 10 毫秒,但将其设置为更大的值似乎有帮助。

    查看我为项目创建的WearableMainActivity.java in this gist 中的代码。祝你好运! :)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-15
      • 1970-01-01
      相关资源
      最近更新 更多