Detectar Moto 360 / circlular forma y onApplyWindowInsetListener no se llama
Parece que las maneras comunes de detectar la forma de la pantalla del Moto 360 no funcionan correctamente.
Sé que hay informes diciendo que windowInset.isRound()
devuelve false en el Moto 360.
- Los APK compatibles con Android Wear deben tener una versión mínima de SDK de al menos 23
- ¿Es posible obtener datos PPG (Photoplethysmogram) de un reloj inteligente a través de Android?
- Android: cómo apoyar la aplicación existente a Android
- Wear App y con tipo de compilación personalizado con applicationIdSuffix
- Android Wear: utiliza el color sólido especificado para el fondo de la notificación
Actualmente mi código es el siguiente
WatchViewStub viewStub = new WatchViewStub(this); viewStub.setRoundLayout(com.pizzaentertainment.weatherwatchface.R.layout.bau); viewStub.setRectLayout(com.pizzaentertainment.weatherwatchface.R.layout.bau_rect); viewStub.setOnApplyWindowInsetsListener( new View.OnApplyWindowInsetsListener() { @Override public WindowInsets onApplyWindowInsets(View view, WindowInsets windowInsets) { Log.d("ISWHAT?", "ASD" +windowInsets.isRound()); return windowInsets; } }); addContentView(viewStub, new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT)); viewStub.setOnLayoutInflatedListener(new WatchViewStub.OnLayoutInflatedListener() { @Override public void onLayoutInflated(WatchViewStub watchViewStub) { Log.d("INFLATED", "INFLATED"); } });
Mi principal problema es que el onApplyWindowInsets
nunca se llama en mi reloj LG G y el Samsung Galaxy Gear Live. Hice una prueba con un usuario de 360 y, según la prueba, ese método no se llama en su dispositivo tampoco.
- ¿Por qué no se llama a
OnApplyWindowInsetListener
? - ¿Por qué la gente que recibió el informe de devolución de llamada que
windowInset.isRound()
devuelve false en el Moto 360? - ¿Cómo se supone que debemos reconocer el Moto 360 (y los futuros con la forma circular)? Desde el
Build.MODEL
?
- ¿Cómo se agrega un módulo de reloj a un proyecto de Android Studio existente?
- Falló el gradle de construcción para la aplicación de desgaste
- Los comandos de voz no funcionan en el equipo de Android
- ¿Cómo probar la aplicación de reloj Android de Android?
- WearableListenerService sólo se inicia después de instalar la aplicación - entonces nunca más
- Proyecto Android Wear con múltiples dimensiones de sabor
- Cómo crear una barra de desplazamiento curvada en Android 2.0?
- Depuración en Moto 360
También encontré que setOnApplyWindowInsetsListener no se llama en los dispositivos reales. Se comprueba en LG G Watch y Gear Live. Parece que esto es cierto para Moto 360 también. Hice la siguiente solución:
WatchViewStub stub = (WatchViewStub) findViewById(R.id.stub); stub.setOnLayoutInflatedListener(new WatchViewStub.OnLayoutInflatedListener() { @Override public void onLayoutInflated(WatchViewStub stub) { Log.d(TAG, "onLayoutInflated()"); m_pager = (GridViewPager) findViewById(R.id.pager_square); m_roundScreen = false; if (m_pager == null) { m_pager = (GridViewPager) findViewById(R.id.pager_round); m_roundScreen = true; } // ... do other pager initializations } });
Establecer en su configuración redonda y cuadrada ID diferente para uno de los componentes y comprobar que uno está cargado, porque no he encontrado ninguna otra manera. En el ejemplo que establezco para mi paginador GridViewPager_square en el diseño cuadrado y pager_round en el diseño redondo. No muy bonito, pero funciona bien como una solución.
Usted no puede tener este problema todavía, pero noté que mi disposición redonda no estaba siendo inflado en mi Moto 360. En lugar mi rectangular era. He arreglado esto cambiando el tema en el archivo de manifiesto a DeviceDefault
.