Cómo crear un servicio para caras de reloj

Una cara de reloj es un servicio empaquetado en una app para Wear OS. Cuando un usuario selecciona una cara de reloj disponible, se muestra esa cara y se invocan los métodos de devolución de llamada del servicio.

Cuando un usuario instala una app para Wear que tiene caras de reloj, estas están disponibles en el reloj por medio del selector de caras de reloj. De manera alternativa, el usuario puede seleccionar una cara de reloj desde una app complementaria en el teléfono vinculado.

En esta página, se describe la configuración de un proyecto de Wear OS para incluir caras de reloj y la implementación de un servicio de caras de reloj.

Cómo crear un proyecto de cara de reloj

Nota: Te recomendamos que uses Android Studio para el desarrollo de Wear OS, ya que proporciona elementos prácticos de configuración de proyectos, inclusión de bibliotecas y empaquetado.

Completa los siguientes pasos para crear un proyecto en Android Studio para tu cara de reloj:

  1. Haz clic en File > New > New Project.
  2. En la ventana Select a project template, selecciona la pestaña Wear y Watch Face en la lista de opciones y haz clic en Next.
  3. En la ventana Configure your project, acepta los valores predeterminados y haz clic en Finish.

Android Studio crea un proyecto con un módulo app para tu servicio de cara de reloj.

Dependencias

Android Studio agrega automáticamente las entradas obligatorias en los archivos build.gradle. En las dependencias, se incluye la biblioteca de caras de reloj de AndroidX. Consulta la muestra de código en GitHub para obtener detalles sobre esta biblioteca.

Referencia de la API de la biblioteca de compatibilidad de wearables

En la documentación de referencia, se proporciona información detallada sobre las clases que usas para implementar caras de reloj. Consulta la documentación de referencia de la API de la biblioteca de compatibilidad de wearables.

Cómo declarar permisos

Una cara de reloj requiere el permiso WAKE_LOCK. Agrega el siguiente permiso a los archivos de manifiesto de la app para Wear OS y la app para teléfonos celulares en el elemento manifest:

<manifest ...>
    <uses-permission
        android:name="android.permission.WAKE_LOCK" />

    <!-- Required for complications to receive complication data and open the provider chooser. -->
    <uses-permission
        android:name="com.google.android.wearable.permission.RECEIVE_COMPLICATION_DATA"/>
    ...
</manifest>

Compatibilidad con inicio directo

Para que la cara de reloj esté disponible antes de desbloquear el usuario, sigue las instrucciones de inicio directo:

  1. Establece el atributo android:directBootAware en true para tu servicio en tu manifiesto.
  2. La cara de reloj debe almacenar información en el almacenamiento encriptado por dispositivo.

Cómo implementar el servicio y los métodos de devolución de llamada

Las caras de reloj en Wear OS se implementan como WatchFaceService. La implementación de WatchFaceService requiere la creación de tres objetos: UserStyleSchema, ComplicationSlotsManager y WatchFace.

Estos tres objetos se especifican mediante la anulación de tres métodos abstractos de WatchFaceService, que se muestran en el siguiente ejemplo:

Kotlin

class CustomWatchFaceService : WatchFaceService() {

    /**
     * The specification of settings the watch face supports.
     * This is similar to a database schema.
     */
    override fun createUserStyleSchema(): UserStyleSchema = // ...

    /**
     * The complication slot configuration for the watchface.
     */
    override fun createComplicationSlotsManager(
        currentUserStyleRepository: CurrentUserStyleRepository
    ): ComplicationSlotsManager = // ...

    /**
     * The watch face itself, which includes the renderer for drawing.
     */
    override suspend fun createWatchFace(
        surfaceHolder: SurfaceHolder,
        watchState: WatchState,
        complicationSlotsManager: ComplicationSlotsManager,
        currentUserStyleRepository: CurrentUserStyleRepository
    ): WatchFace = // ...

}

Cómo registrar el servicio de caras de reloj

Después de implementar el servicio de caras de reloj, registra la implementación en el archivo de manifiesto de la app para wearables. Cuando los usuarios instalan esta app, el sistema usa la información sobre el servicio para que la cara de reloj esté disponible en la aplicación complementaria de Wear OS y en el selector de caras de reloj en el dispositivo wearable.

El siguiente fragmento muestra el modo en que se registra una implementación de cara de reloj en el elemento <application>:

<service
    android:name=".AnalogWatchFaceService"
    android:label="@string/analog_name"
    android:permission="android.permission.BIND_WALLPAPER" >
    <meta-data
        android:name="android.service.wallpaper"
        android:resource="@xml/watch_face" />
    <meta-data
        android:name="com.google.android.wearable.watchface.preview_circular"
        android:resource="@drawable/preview_analog_circular" />
    <intent-filter>
        <action android:name="android.service.wallpaper.WallpaperService" />
        <category
            android:name=
            "com.google.android.wearable.watchface.category.WATCH_FACE" />
    </intent-filter>
</service>

La aplicación complementaria de Wear OS by Google y el selector de caras de reloj en el dispositivo wearable usan la imagen de vista previa definida por la entrada de metadatos com.google.android.wearable.watchface.preview_circular cuando presentan a los usuarios todas las caras de reloj instaladas en el dispositivo. Para obtener este elemento de diseño, ejecuta la cara de reloj en tu dispositivo Wear OS o en una instancia de emulador y toma una captura de pantalla. En los dispositivos para Wear con pantallas hdpi, la imagen de vista previa suele tener un tamaño de 320 x 320 píxeles.

La entrada de metadatos android.service.wallpaper especifica el archivo de recursos watch_face.xml, que contiene un elemento wallpaper, como se muestra en el siguiente fragmento:

<?xml version="1.0" encoding="UTF-8"?>
<wallpaper xmlns:android="http://schemas.android.com/apk/res/android" />

Tu app para wearables puede incluir más de una cara de reloj. Debes agregar una entrada de servicio al archivo de manifiesto de la app para wearables para cada una de las implementaciones de la cara de reloj.

Consulta los siguientes recursos relacionados: