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

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

Я следил за учебником, чтобы вызывать Wearable активность с телефона, размещенную здесь Как отправить уведомление от карманного устройства, чтобы носить, чтобы открыть Activity on wear device. Однако я беру исходный код из ответа. Однако я не мог заставить его работать. Похоже, onDataChanged() никогда не вызывается. Я задаю это как вопрос самостоятельно, потому что, похоже, пример работает для других. Я нахожусь в KitKat 4.4.2, если это имеет значение.

Любой совет, где можно проверить, спасибо.

4b9b3361

Ответ 1

Есть две вещи, которые вы можете проверить:

  • packageName приложения для ношения должно быть идентично packageName приложения устройства
  • onDataChanged() вызывается только при изменении данных. Если вы поместите одни и те же данные в DataApi несколько раз, метод вызывается только один раз, пока вы не напишете разные данные. Вы можете добавить временную метку к данным, чтобы убедиться, что метод вызывается один раз для каждой операции записи. Однако использование DataApi потенциально более дорогое с точки зрения использования батареи, чем отправка сообщения. Поэтому, если вы просто хотите активировать действие после помещения данных в DataApi, просто отправьте сообщение, когда вы закончите.

Ответ 2

С версией 8.3.0 Служб Службы сообщения могут быть отложены до 30 минут. С помощью нового метода setUrgent() он отправляется без задержки.

Наконец, если вы разрабатываете носимые носители, вы знаете, что время автономной работы и оптимизация использования энергии имеют решающее значение для обеспечения отличной работы с пользователем. С сервисами Google Play 8.3 мы обновили DataApi, чтобы обеспечить срочность синхронизации элементов данных. Теперь в элемент данных можно добавить приоритет, чтобы определить, когда он должен быть синхронизирован. Например, если вы создаете приложение, для которого требуется немедленная синхронизация, например приложение удаленного управления, его все равно можно сделать сразу, вызвав setUrgent(), но для чего-то вроде обновления ваших контактов вы можете переносить некоторую задержку. Несрочные данные Данные могут быть отложены на срок до 30 минут, но вы можете ожидать, что в большинстве случаев они будут доставлены в течение нескольких минут. Низкий приоритет теперь по умолчанию, поэтому для получения предыдущего времени требуется setUrgent().

http://android-developers.blogspot.nl/2015/11/whats-new-in-google-play-services-83.html

Ответ 3

убедитесь, что файл applicationId в файле build.gradle идентичен для вашего карманного компьютера и вашего загружаемого модуля

apply plugin: 'com.android.application'

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.2"

    defaultConfig {
        applicationId "your.applicationid" // needs to be the same in both modules
        minSdkVersion 20
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
        targetCompatibility = '1.7'
}

...

Ответ 4

Для меня виновником была эта строка в объявлении сервиса:

android:permission="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE"

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

Ответ 5

1.check build.gradle для мобильных устройств и для ношения с той же версией воспроизведения компиляции 'com.google.android.gms: play-services-wearable: 6.5.87'

У меня есть знак + на мобильном телефоне, и последняя версия была принята только на мобильных телефонах

Обновите ту же версию до тех пор, пока она не будет работать

2.Убежденное обходное решение, если ничего не работает (!! это работает с различными версиями воспроизведения на парах, если вы делаете первый шаг, вам это не нужно)

....
Wearable.DataApi.putDataItem(mGoogleApiClient, request)
.......  
this line after your put

Wearable.DataApi.deleteDataItems(mGoogleApiClient, request.getUri());

Это трюк репликации, который выполняет 3 вещи:

  • пробуждение пары

  • отправить данные

  • выполнить OnDataChange на обоих с хорошими данными

  • удалить данные (выполнить OnDataChange на обоих без данных) (так что подготовьтесь к работе даже после удаления данных)

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

Ответ 6

Если вы используете эмулятор Android Wear, убедитесь, что приложение Android Wear на телефоне подключено к эмулятору и вы запустите команду adb tcp forwarding.

Дополнительная информация здесь: fooobar.com/questions/130803/...

Ответ 7

после метода onDataChanged, я заставляю

onDataChanged (DataEventBuffer dataEvents) {

- doDataStuff ---

mGoogleApiClient.disconnect(); mGoogleApiClient.connect();

}

только с этой настройкой работает onDataChanged.