Подтвердить что ты не робот

OnMessageReceived не вызван в WearableListenerService

Я работаю над приложением для Android с использованием Eclipse IDE. Я использую те же названия пакетов для ношения приложения и мобильного приложения, и я упаковываю загружаемое приложение вручную в соответствии с документацией Google. Все работает отлично. Он установлен на эмулятор одежды для Android, используя отладку usb с телефоном.

Моя проблема в том, что я отправляю сообщение для ношения с помощью следующего кода

List<Node> nodeList=getNodes();
for(Node node : nodeList) {
    Log.v(" ", "telling " + node.getId() );

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

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

Метод OnPeerConnected запускается, когда устройства просматриваются, но OnMessageReceived никогда не вызывается в WearableListenerService.Это мой код WearableListenerService:

public class DataLayerListenerService extends WearableListenerService {

    private static final String TAG = "DataLayerSample";
    private static final String START_ACTIVITY_PATH = "/start/MainActivity";
    private static final String DATA_ITEM_RECEIVED_PATH = "/data-item-received";
    private static final String LOG_TAG = "log";
    @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);
    }
    @Override
    public void onDataChanged(DataEventBuffer dataEvents) {
        System.out.println("Recevive message3");
    }

    @Override
    public void onMessageReceived(MessageEvent messageEvent) {
        System.out.println("service watch message1");
        if (messageEvent.getPath().equals(START_ACTIVITY_PATH)) {
            System.out.println("service watch message2");
            Intent startIntent = new Intent(this, MainActivity.class);
            startIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            startActivity(startIntent);
        }
    }
}

Также всегда появляется предупреждающее сообщение в Logcat:

приложение не соответствует ключу приложения приложения: AppKey [com.myapp, c3f31717fa35401056c20a2798907f1232efa75e]!= AppKey [com.myapp, f36e726eefc7e528db26a1c25f6fbf2f93dacd70]

Если ключ приложения для обоих приложений должен быть таким же, как я могу создать тот же ключ приложения для обоих приложений.

Любая помощь высоко ценится, Спасибо.

4b9b3361

Ответ 1

Сообщение об ошибке:

приложение не соответствует клавише записи приложения: AppKey [com.myapp, c3f31717fa35401056c20a2798907f1232efa75e] != AppKey [com.myapp, f36e726eefc7e528db26a1c25f6fbf2f93dacd70]

Указано, что ваши приложения подписаны с помощью разных ключей.
Названия пакетов телефонов и носимых приложений одинаковые - это хорошо, но им также необходимо использовать одну и ту же подпись. По этой причине сообщения не могут быть доставлены - носимые приложения распознаются как "часть одного и того же приложения" на основе имени и подписи пакета.

Пожалуйста, убедитесь, что оба приложения подписаны с тем же ключом. Если вы тестируете функцию автоматической установки, обязательно удалите отладочную версию загружаемого приложения из эмулятора часов.

Ответ 2

У меня была такая же ошибка, моя ошибка заключалась в том, что имя пакета модуля "wear" не совпадает с именем приложения.

BAD:
[module: app] es.voghdev.myapp
[module: wear] es.voghdev.myapp.wear

GOOD:
[module: app] es.voghdev.myapp
[module: wear] es.voghdev.myapp

Сделал меня так много времени! > : - (

Ответ 3

Используйте asyntask для отправки сообщений, поскольку они будут блокировать поток ui. Также вам нужно вызвать метод ожидания. Чтобы приложения имели один и тот же ключ, вам нужно использовать варианты сборки с gradle.

public class SendMessageTask extends AsyncTask<Void, Void, Void> {

    @Override
    protected Void doInBackground(Void... voids) {
        NodeApi.GetConnectedNodesResult nodes =
                Wearable.NodeApi.getConnectedNodes(apiClient).await();
        for (Node node : nodes.getNodes()) {
            Wearable.MessageApi
                    .sendMessage(apiClient, node.getId(), "/start/MainActivity", null)
                    .await();
        }

        return null;
    }

    @Override
    protected void onPostExecute(Void aVoid) {
        super.onPostExecute(aVoid);
        Toast.makeText(MainActivity.this, "Message Sent", Toast.LENGTH_SHORT).show();
    }
}

Ответ 4

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