WearableListenerService onMessageReceived() не вызывается


На телефонном устройстве у меня есть WearableListenerService, прослушивающий ввод с устройства Android Wear.

Я использую как DataItems, так и сообщения. Синхронизация данных между двумя устройствами просто отличная, однако у меня возникли проблемы с получением сообщений по телефону.

Я попробовал следующее:

  • подтвержденный износ отправил сообщение
  • проверено, совпадают ли имена пакетов
  • проверено, совпадают ли подписи (оба-Android Debug)

Тем не менее, onMessageReceived не вызывается в DataLayerListenerService. Первоначально я использовал activity и extending MessageListener, который также не работал, кроме одной точки, где он ненадолго работал.

Android Wear code

public static void sendMessageToDevice(final String commandPath, final byte[] additionalData)
{
    // Separate thread from UI thread
    new Thread(new Runnable()
    {
        @Override
        public void run()
        {
            String nodeId = null;

            // Find first connected device id

            NodeApi.GetConnectedNodesResult result =
                    Wearable.NodeApi.getConnectedNodes(mGoogleApiClient).await();
            List<Node> nodes = result.getNodes();

            if (nodes.size() > 0)
            {
                nodeId = nodes.get(0).getId();
            }
            if (nodeId != null)
            {
                Wearable.MessageApi.sendMessage(mGoogleApiClient, nodeId,
                        commandPath, additionalData).setResultCallback(new ResultCallback<MessageApi.SendMessageResult>()
                {
                    @Override
                    public void onResult(MessageApi.SendMessageResult sendMessageResult)
                    {
                        if (!sendMessageResult.getStatus().isSuccess())
                        {
                            System.err.println("Message " + commandPath + " could not be sent.");
                        }
                    }
                });

                System.out.println("Command path is: " + commandPath);
            }
        }
    }).start();
}

Код устройства Android

public class DataLayerListenerService extends WearableListenerService
{

@Override
public void onMessageReceived(MessageEvent messageEvent)
{
    System.out.println("Received command");
    String command = messageEvent.getPath();
    System.out.println("Received command is: " + command);
    if (command.contains("/mobile/input/"))
    {
        System.out.println(command);
    }
}

@Override
public void onDataChanged(DataEventBuffer dataEvents)
{
    for (DataEvent event : dataEvents)
    {
        if (event.getType() == DataEvent.TYPE_CHANGED)
        {
            DataItem item = event.getDataItem();
            DataMap dataMap = DataMapItem.fromDataItem(item).getDataMap();
            String itemPath = item.getUri().getPath();
            if (itemPath.equals("/mobile/input/level"))
            {
                int level = dataMap.getInt("level");
                MainActivity.readLevel(level);
            }
        }
    }
}
}
1 2

1 ответ:

Одна из возможных проблем может заключаться в следующем: вы захватываете все подключенные узлы, а затем вы захватываете самый первый, который нацелен на ваше сообщение. Это вполне может оказаться облачным узлом (или другим носимым устройством, если у вас их несколько), а не вашим телефоном. Правильный подход заключается в использовании CapabilityApis, чтобы найти правильный узел для отправки сообщения. В коде посмотрите на узел.toString () для узла, который вы выбрали, чтобы подтвердить, что он выбирает облако, чтобы быть уверенным вот в чем проблема.