Intereting Posts
Перейдите в начало в RecyclerView с помощью LinearLayoutManager Сообщение Android «Обнаружение экрана», если пользователь пытается предоставить разрешение при показе уведомления API-ключ для GCM неожиданно недействителен? Несанкционированная ошибка (401) Как правильно настроить GridView? AppCompatActivity вместо Activity или FragmentActivity OnViewCreated – неправильное место для замены фрагмента? RecyclerView внутри NestedScrollView onBindViewHolder, вызывающий весь размер getItemCount Как определить, может ли Android обрабатывать PDF Что делает флажок «Библиотека», «Под крышкой»? Android 3.0 – в чем преимущества использования экземпляров LoaderManager именно так? Обнаружение аварийных сигналов будильника по умолчанию Android SyncAdapter с помощью учетной записи google Как ссылаться на внешнюю банку в проекте библиотеки Android в IntelliJ v10 Проблема с сетевым носителем JellyBean для Android Содержимое TextView теряется после изменения ориентации экрана

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]

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

Любая помощь очень ценится, спасибо.

Solutions Collecting From Web of "OnMessageReceived не вызван в WearableListenerService"

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

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

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

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

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

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

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

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

 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(); } }