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.
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 subclases NotificationCompat.Style. 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 especialmente 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 Cómo unir opciones 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 clase
NotificationCompat.WearableExtender 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 establecer una acción específica para Wear en la notificación y también establecer el
ID de descarte. Cuando se descarta la notificación, también se descartan todas las que tengan el mismo ID de descarte en el reloj y el teléfono complementario. Para recuperar un ID de descarte, 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 la app de teléfono desde un dispositivo wearable
Si usas notificaciones compartidas, 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 nuevo
Activityque extiendaConfirmationActivity. - Usa
RemoteActivityHelperen el nuevoActivitypara iniciar la app de Teléfono. - Cuando compiles el
Intentpara iniciar elActivitydesde la notificación, establece el elemento adicionalEXTRA_ANIMATION_TYPEenOPEN_ON_PHONE_ANIMATION.
Nota: No puedes usar un BroadcastReceiver como destino de la acción de notificación.