Las notificaciones en los relojes usan las mismas APIs y tienen la misma estructura que las notificaciones en los teléfonos.
Las notificaciones pueden aparecer en un reloj de dos maneras:
- Una app para dispositivos móviles crea una notificación y el sistema vincula automáticamente esa notificación con el reloj.
- Una app para wearables crea una notificación.
En ambos casos, usa la clase NotificationCompat.Builder para crear notificaciones. Cuando compilas notificaciones con la clase builder, el sistema se encarga de mostrarlas de forma correcta. Por ejemplo, cuando emites una notificación desde
tu app para dispositivos móviles, cada notificación aparece como una tarjeta en el flujo de notificaciones.
Consulta el siguiente ejemplo para ver cómo se muestran las notificaciones.
Figura 1: La misma notificación como aparece en un teléfono y en un reloj
Usa una de las subclases NotificationCompat.Style para obtener los mejores resultados
Nota:
Con RemoteViews
se quitan las notificaciones de diseños personalizados, y el wearable solo muestra el texto y los íconos.
Nota:
Las notificaciones de intents de pantalla completa (setFullScreenIntent())
y el permiso USE_FULL_SCREEN_INTENT
no son compatibles con Wear OS.
Notificaciones recomendadas para wearables
Usa las notificaciones expandibles como punto de partida para todas las notificaciones, ya que son una excelente manera de atraer a los usuarios de wearables. El estado contraído se muestra en la bandeja de notificaciones para ofrecer una experiencia breve y fácil de ver. Si el usuario presiona la notificación, esta se expande, y se muestra una experiencia envolvente de contenido y acciones adicionales que se pueden desplazar.
Puedes crear una notificación expandible
de la misma manera que lo harías en dispositivos móviles, usando cualquiera de las NotificationCompat.Style
subclases. Por ejemplo, una notificación estándar que usa
NotificationCompat.MessagingStyle
se ve de la siguiente manera:
Figura 2: Ejemplo de una notificación de MessagingStyle en Wear OS
Puedes ver que la notificación tiene varias acciones apiladas en la parte inferior del estado expandido.
Sugerencia: Si tus notificaciones incluyen una acción de "respuesta" (por ejemplo, para una app de mensajería
), puedes mejorar su comportamiento. Por ejemplo, puedes habilitar las respuestas de entrada de voz directamente desde el wearable o las respuestas de texto predefinidas con setChoices().
Para obtener más información, consulta Cómo agregar el botón de respuesta.
Cómo evitar notificaciones duplicadas
De forma predeterminada, las notificaciones se comparten desde la aplicación complementaria para teléfonos a cualquier reloj vinculado. Esta es una opción muy útil si no tienes instalada una app para wearables.
Sin embargo, si compilas una app independiente para relojes y una aplicación complementaria para teléfonos, estas crean notificaciones duplicadas.
Wear OS proporciona una forma de detener las notificaciones duplicadas con las APIs de modo puente. Esto es particularmente importante para las apps en dispositivos que ejecutan Wear OS 5 o versiones posteriores, ya que algunas notificaciones que se pueden descartar en un dispositivo móvil no se pueden descartar en el dispositivo Wear OS. Para obtener más información, consulta Opciones de modo puente para las notificaciones.
Cómo agregar funciones específicas de wearables a una notificación
Si necesitas agregar funciones específicas de wearables a una notificación, puedes usar la
NotificationCompat.WearableExtender clase para especificar las opciones.
Para usar esta API, haz lo siguiente:
Nota:
Si usas el framework de NotificationManager,
algunas funciones de
NotificationCompat.WearableExtender no funcionan, así que asegúrate de usar
NotificationCompat.
En este ejemplo, se muestra cómo configurar una acción específica de Wear en la notificación y también configurar el
ID de cancelación. Cuando se cancela la notificación, las demás notificaciones con el mismo
ID de cancelación también se cancelan en el reloj y en el teléfono vinculado. Para recuperar un ID de cancelación,
usa
getDismissalId().
// This intent will be fired as a result of the user clicking the "Open on watch" action. // However, it executes on the phone, not on the watch. Typically, the Activity should then use // RemoteActivityHelper to then launch the correct activity on the watch. val intent = Intent(context, LaunchOnWearActivity::class.java) val wearPendingIntent = PendingIntent.getActivity( context, wearRequestCode, intent, PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE ) val openOnWatchAction = NotificationCompat.Action.Builder( R.drawable.watch, "Open on watch", wearPendingIntent ) .build() val wearableExtender = NotificationCompat.WearableExtender() // This action will only be shown on the watch, not on the phone. // Actions added to the Notification builder directly will not be shown on the watch, // because one or more actions are defined in the WearableExtender. .addAction(openOnWatchAction) // This synchronizes dismissals between watch and phone. .setDismissalId(chatId) val notification = NotificationCompat.Builder(context, channelId) // ... set other fields ... .extend(wearableExtender) .build()
Cómo iniciar tu app para teléfonos desde un dispositivo wearable
Si usas notificaciones en modo puente, cualquier notificación incluye automáticamente un botón para iniciar la app en el teléfono. Sin embargo, si usas una notificación local, creada en el reloj, sigue estos pasos para crear un botón que inicie la app en el teléfono:
- Crea un
Activitynuevo que extiendaConfirmationActivity. - Usa
RemoteActivityHelperen laActivitynueva para iniciar la app para teléfonos. - Cuando compiles el
Intentpara iniciar laActivitydesde la notificación, configura el extraEXTRA_ANIMATION_TYPEenOPEN_ON_PHONE_ANIMATION.
Nota: No puedes usar un BroadcastReceiver como destino
de la acción de notificación.