tag studio log example android wear-os

studio - log android



WearableListenerService, onDataChanged() no se llama (7)

1.check build.gradle para móviles y para usar para tener la misma versión de juego compile ''com.google.android.gms: play-services-wearable: 6.5.87''

El mío tiene un signo + en el móvil y solo tomó la última versión en el móvil

Actualiza la misma versión en ambos hasta que funcione.

2. Solución estúpida, si nada funciona (!! esto funciona con diferentes versiones de juego en parejas, si haces el paso uno no necesitas esto)

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

Es un truco de replicación que hace 3 cosas:

  • despertar par

  • enviar datos

  • Ejecuta OnDataChange en ambos con buenos datos

  • eliminar datos (ejecute OnDataChange en ambos sin datos) (así que prepárese para trabajar incluso después de eliminar los datos)

Mi problema fue que los datos se pusieron en cola y se detuvieron de guardia hasta el primer toque, ahora es bidireccional en tiempo real

Seguí el tutorial para invocar una actividad de Wearable desde el teléfono, publicado aquí Cómo enviar una notificación de la computadora de mano para usar y abrir el dispositivo Activity on wear . Sin embargo, tomo el código fuente de la respuesta. Sin embargo, no pude hacerlo funcionar. Parece que nunca se llama a onDataChanged() . Hago esto como una pregunta en sí misma porque parece que el ejemplo funciona para otros. Estoy en KitKat 4.4.2, si eso importa.

Cualquier consejo donde comprobar, gracias.


Con la versión 8.3.0 de Play Services, los mensajes podrían retrasarse hasta 30 minutos. Con el nuevo método setUrgent () se envía sin demora.

Finalmente, si está desarrollando para wearables, sabrá que la vida útil de la batería y la optimización del uso de energía son fundamentales para tener una excelente experiencia de usuario. Con los servicios de Google Play 8.3, hemos actualizado DataApi para permitir la urgencia de cómo se sincronizan los elementos de datos. Ahora, se puede agregar una prioridad al elemento de datos para determinar cuándo se debe sincronizar. Por ejemplo, si está creando una aplicación que requiere sincronización inmediata, como una aplicación de control remoto, aún puede hacerse inmediatamente llamando a setUrgent (), pero para algo como actualizar sus contactos, podría tolerar un poco de retraso. Los DataItems no urgentes pueden demorarse hasta 30 minutos, pero puede esperar que en la mayoría de los casos se entreguen en unos pocos minutos. La prioridad baja es ahora la predeterminada, por lo que se necesita setUrgent () para obtener el tiempo anterior.

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


Después del método onDataChanged, estoy forzando

onDataChanged (DataEventBuffer dataEvents) {

--doDataStuff ---

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

}

solo con esta configuración, onDataChanged funciona para mí.


Hay dos cosas que puedes verificar:

  • packageName de la aplicación de desgaste debe ser idéntico a packageName de la aplicación del dispositivo
  • onDataChanged() solo se llama cuando los datos realmente cambian . Si coloca los mismos datos en el DataApi varias veces, solo se llama al método una vez hasta que escribe datos diferentes. Puede agregar una marca de tiempo a los datos para asegurarse de que se llame al método una vez para cada operación de escritura. Sin embargo, usar el DataApi es potencialmente más costoso en términos de uso de la batería que enviar un mensaje. Entonces, si solo desea activar una acción después de colocar datos en el DataApi, simplemente envíe un mensaje cuando haya terminado.

Para mí, el culpable fue esta línea en la declaración de servicio:

android:permission="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE"

No estoy exactamente seguro de qué causa esta línea hace que el servicio no reciba eventos, pero cuando se eliminó comenzó a funcionar correctamente.


Si está utilizando el emulador de Android Wear, asegúrese de que la aplicación Android Wear del teléfono esté Conectada al emulador y ejecute el comando de reenvío adb tcp.

Detalles adicionales aquí: https://.com/a/25506889/1044864


asegúrese de que el applicationId en el archivo build.gradle sea el mismo para su computadora de mano y su módulo portátil

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'' } ...