Home | History | Annotate | Download | only in features
      1 page.title=Notificaciones
      2 page.tags=notifications
      3 helpoutsWidget=true
      4 page.image=/preview/images/notifications-card.png
      5 
      6 trainingnavtop=true
      7 
      8 @jd:body
      9 
     10 <div id="qv-wrapper">
     11 <div id="qv">
     12 
     13 <!-- table of contents -->
     14 <h2>Este documento incluye lo siguiente:</h2>
     15 <ol>
     16   <li><a href="#direct">Respuesta directa</a></li>
     17   <li><a href="#bundle">Notificaciones integradas</a></li>
     18   <li><a href="#custom">Vistas personalizadas</a></li>
     19   <li><a href="#style">Estilo de mensajera</a></li>
     20 </ol>
     21 
     22 </div>
     23 </div>
     24 
     25 <p>Android N presenta varias API nuevas que permiten a las aplicaciones publicar
     26 notificaciones altamente visibles e interactivas.</p>
     27 
     28 <p>Android N ampla la API de notificacin existente {@link android.support.v4.app.RemoteInput}
     29 para admitir respuestas en lnea en telfonos celulares. Esta funcin permite a los usuarios
     30  responder rpidamente desde el panel de notificaciones sin tener que visitar tu aplicacin.</p>
     31 
     32 <p>
     33   Android N tambin te permite agrupar notificaciones similares para que
     34   aparezcan como una sola notificacin. Para que esto sea posible, Android N usa el mtodo existente {@link
     35   android.support.v4.app.NotificationCompat.Builder#setGroup
     36   NotificationCompat.Builder.setGroup()}. Los usuarios pueden expandir cada una de las
     37   notificaciones y realizar acciones como responder e ignorar en cada una
     38   de ellas, de forma individual desde el panel de notificaciones.
     39 </p>
     40 
     41 <p>Por ltimo, Android N tambin suma nuevas API que te permiten aprovechar las decoraciones
     42 del sistema en las vistas de notificacin personalizadas de tu aplicacin. Estas API ayudan a
     43 garantizar que las vistas de notificaciones compartan una presentacin acorde a las
     44 plantillas estndar.</p>
     45 
     46 <p>En este documento se destacan algunos de los cambios clave que puedes tener en cuenta
     47  al usar las nuevas funciones de notificacin en tus aplicaciones.</p>
     48 
     49 <h2 id="direct">Respuesta directa</h2>
     50 
     51 <p>Con la funcin de respuesta directa en Android N, los usuarios pueden responder
     52 rpidamente mensajes de texto o actualizar listas de tareas directamente dentro de la interfaz de
     53 notificacin. En un dispositivo porttil, la accin de respuesta en lnea aparece como un botn adicional
     54  anexado a la notificacin. Cuando un usuario responde mediante el teclado, el sistema adjunta
     55  la respuesta de texto a la intent
     56  que especificaste para la accin de notificacin y enva la intencin a tu
     57  aplicacin para dispositivos porttiles.
     58 
     59 
     60 <img id="fig-reply-button" src="{@docRoot}preview/images/inline-reply.png" srcset="{@docRoot}preview/images/inline-reply.png 1x,
     61   {@docRoot}preview/images/inline-reply_2x.png 2x" width="400">
     62 <p class="img-caption">
     63   <strong>Figura 1.</strong> Android N agrega el botn de accin <strong>Reply</strong>
     64 .
     65 </p>
     66 
     67 <h3>Adicin de acciones de respuesta en lnea</h3>
     68 
     69 <p>Para crear una accin de notificacin que admita respuesta directa:
     70 </p>
     71 
     72 <ol>
     73 <li>Crea una instancia de {@link android.support.v4.app.RemoteInput.Builder}
     74   que puedas agregar a tu accin de
     75 notificacin. El constructor de esta clase acepta una cadena que el sistema usa como clave
     76  para la insercin de texto. Luego, tu aplicacin para dispositivos porttiles usar esa clave para recuperar el texto
     77   de la entrada.
     78 
     79 <pre>
     80 // Key for the string that's delivered in the action's intent.
     81 private static final String KEY_TEXT_REPLY = "key_text_reply";
     82 String replyLabel = getResources().getString(R.string.reply_label);
     83 RemoteInput remoteInput = new RemoteInput.Builder(KEY_TEXT_REPLY)
     84         .setLabel(replyLabel)
     85         .build();
     86 </pre>
     87 </li>
     88 <li>Adjunta el objeto {@link android.support.v4.app.RemoteInput}
     89  a una accin usando <code>addRemoteInput()</code>.
     90 
     91 <pre>
     92 // Create the reply action and add the remote input.
     93 Notification.Action action =
     94         new Notification.Action.Builder(R.drawable.ic_reply_icon,
     95                 getString(R.string.label), replyPendingIntent)
     96                 .addRemoteInput(remoteInput)
     97                 .build();
     98 </pre>
     99 </li>
    100 
    101 <li>Aplica la accin a una notificacin y emite la notificacin.
    102 
    103 <pre>
    104 // Build the notification and add the action.
    105 Notification newMessageNotification =
    106         new Notification.Builder(mContext)
    107                 .setSmallIcon(R.drawable.ic_message)
    108                 .setContentTitle(getString(R.string.title))
    109                 .setContentText(getString(R.string.content))
    110                 .addAction(action))
    111                 .build();
    112 
    113 // Issue the notification.
    114 NotificationManager notificationManager =
    115         NotificationManager.from(mContext);
    116 notificationManager.notify(notificationId, newMessageNotification);
    117 
    118 </pre>
    119 </li>
    120 
    121 </ol>
    122 
    123 
    124 <p> Cuando se active la accin de notificacin,
    125 el sistema le solicitar al usuario que ingrese una respuesta. </p>
    126 
    127 <img id="fig-user-input" src="{@docRoot}preview/images/inline-type-reply.png" srcset="{@docRoot}preview/images/inline-type-reply.png 1x,
    128     {@docRoot}preview/images/inline-type-reply_2x.png 2x" width="300">
    129 <p class="img-caption">
    130   <strong>Figura 2.</strong> El usuario ingresa texto desde el panel de notificaciones.
    131 </p>
    132 
    133 <h3>
    134   Recuperacin de entradas del usuario a partir de la respuesta en lnea
    135 </h3>
    136 
    137 <p>
    138   Para recibir entradas del usuario de la interfaz de notificacin a la actividad que
    139  declaraste en la intent de la accin de respuesta:
    140 </p>
    141 
    142 <ol>
    143   <li>Llama a {@link android.support.v4.app.RemoteInput#getResultsFromIntent
    144   getResultsFromIntent()} pasando la intent de la accin de notificacin como
    145  el parmetro de entrada. Este mtodo devuelve un {@link android.os.Bundle} que
    146  contiene la respuesta de texto.
    147 
    148     <pre>
    149 Bundle remoteInput = RemoteInput.getResultsFromIntent(intent);
    150 </pre>
    151   </li>
    152 
    153   <li>Consulta el paquete con la clave de resultado (proporcionada al constructor {@link
    154   android.support.v4.app.RemoteInput.Builder}). Puedes completar
    155  este proceso y recuperar el texto de entrada mediante la creacin de un mtodo, como en el
    156  siguiente fragmento de cdigo:
    157 
    158     <pre>
    159 // Obtain the intent that started this activity by calling
    160 // Activity.getIntent() and pass it into this method to
    161 // get the associated string.
    162 
    163 private CharSequence getMessageText(Intent intent) {
    164     Bundle remoteInput = RemoteInput.getResultsFromIntent(intent);
    165     if (remoteInput != null) {
    166         return remoteInput.getCharSequence(KEY_TEXT_REPLY);
    167     }
    168     return null;
    169  }
    170 </pre>
    171   </li>
    172 
    173   <li>Crea y emite otra notificacin, utilizando la misma ID de notificacin que
    174  proporcionaste para la notificacin anterior. El indicador de progreso
    175  desaparece de la interfaz de notificacin para informarles a los usuarios que la respuesta
    176  fue exitosa. Al trabajar con esta nueva notificacin, usa el contexto que se
    177  pasa al mtodo {@code onReceive()} del receptor.
    178 
    179     <pre>
    180 // Build a new notification, which informs the user that the system
    181 // handled their interaction with the previous notification.
    182 Notification repliedNotification =
    183         new Notification.Builder(context)
    184                 .setSmallIcon(R.drawable.ic_message)
    185                 .setContentText(getString(R.string.replied))
    186                 .build();
    187 
    188 // Issue the new notification.
    189 NotificationManager notificationManager =
    190         NotificationManager.from(context);
    191 notificationManager.notify(notificationId, repliedNotification);
    192 </pre>
    193   </li>
    194 </ol>
    195 
    196 <p>
    197   En el caso de las aplicaciones interactivas, como los chats, podra ser til incluir 
    198  contexto adicional cuando se administra texto recuperado. Por ejemplo, en estas aplicaciones, se podran mostrar
    199  mltiples lneas de historial de chat. Cuando el usuario responde a travs de {@link
    200   android.support.v4.app.RemoteInput}, puedes actualizar el historial de respuestas
    201  por medio del mtodo {@code setRemoteInputHistory()}.
    202 </p>
    203 
    204 <p>
    205   La notificacin se debe actualizar o cancelar luego de que la aplicacin haya
    206  recibido entradas remotas. Cuando el usuario responde a una actualizacin remota
    207  por medio de la respuesta directa,
    208  no canceles la notificacin. En cambio, actualiza la notificacin para mostrar la respuesta del usuario.
    209 En el caso de las notificaciones que utilizan {@code MessagingStyle}, debes agregar
    210 la respuesta como el mensaje ms reciente. Cuando se utilizan otras plantillas, puedes
    211 agregar la respuesta del usuario al historial de entradas remotas.
    212 </p>
    213 
    214 <h2 id="bundle">Notificaciones integradas</h2>
    215 
    216 <p>Android N ofrece a los desarrolladores una nueva manera de representar
    217  una cola de notificaciones: <i>notificaciones integradas</i>. Esto es similar a la funcin
    218   <a href="{@docRoot}training/wearables/notifications/stacks.html">Pilas de
    219   notificaciones</a> en Android Wear. Por ejemplo, si tu aplicacin crea notificaciones
    220   para los mensajes recibidos, cuando se recibe ms de un mensaje, agrupa las
    221  notificaciones en un solo paquete. Puedes
    222  usar el mtodo existente {@link android.support.v4.app.NotificationCompat.Builder#setGroup
    223 Builder.setGroup()} para agrupar notificaciones similares.</p>
    224 
    225 <p>
    226   El grupo de notificaciones impone una jerarqua en las notificaciones que lo integran.
    227   En la parte superior de esa jerarqua se encuentra una notificacin principal que muestra informacin
    228   resumida para el grupo. El usuario puede expandir
    229   progresivamente el grupo de notificaciones, y el sistema muestra ms informacin a medida que el
    230   usuario contina indagando. Cuando el usuario expande el paquete, el sistema revela ms
    231   informacin para todas sus notificaciones secundarias; cuando el usuario
    232   expande una de esas notificaciones, el sistema revela todo su contenido.
    233 </p>
    234 
    235 <img id="fig-bundles" src="{@docRoot}preview/images/bundles.png" srcset="{@docRoot}preview/images/bundles.png 1x,
    236           {@docRoot}preview/images/bundles_2x.png 2x" width="300">
    237 <p class="img-caption">
    238   <strong>Figura 3.</strong> El usuario puede expandir progresivamente el grupo de
    239  notificaciones.
    240 </p>
    241 
    242 <p class="note">
    243   <strong>Nota:</strong> Si la misma aplicacin enva cuatro o ms notificaciones
    244  y no se especifica un grupo, el
    245  sistema las agrupa automticamente.
    246 </p>
    247 
    248 <p>Para obtener informacin acerca de cmo agregar notificaciones a un grupo, consulta
    249 <a href="{@docRoot}training/wearables/notifications/stacks.html#AddGroup">Agregar
    250 cada notificacin a un grupo</a>.</p>
    251 
    252 
    253 <h3 id="best-practices">Prcticas recomendadas para las notificaciones integradas</h3>
    254 <p>Esta seccin proporciona pautas acerca de cundo usar grupos de notificaciones en lugar
    255 de las notificaciones {@link android.app.Notification.InboxStyle InboxStyle}
    256 que estaban disponibles en versiones anteriores de la
    257 plataforma Android.</p>
    258 
    259 <h3>Cundo usar notificaciones integradas</h3>
    260 
    261 <p>Solo debes usar grupos de notificaciones si se cumplen todas las siguientes condiciones
    262 para tu caso de uso:</p>
    263 
    264 <ul>
    265   <li>Las notificaciones secundarias son notificaciones completas y se pueden mostrar
    266    individualmente sin la necesidad de un resumen del grupo.</li>
    267   <li>El aislamiento de notificaciones secundarias de forma individual tiene un beneficio. Por
    268   ejemplo:
    269   </li>
    270   <ul>
    271     <li>Son interactivas, con acciones especficas para cada notificacin secundaria.</li>
    272     <li>Hay ms informacin sobre la notificacin secundaria que el usuario quiere leer.</li>
    273   </ul>
    274 </ul>
    275 
    276 <p>Algunos ejemplos de buenos casos de uso para grupos de notificaciones incluyen: una aplicacin de mensajera
    277 que exhiba una lista de mensajes entrantes, o una aplicacin de correo electrnico que exhiba una lista de
    278 correos electrnicos recibidos.</p>
    279 
    280 <p>
    281 Algunos ejemplos de casos en los que se prefiere una sola notificacin
    282  incluyen mensajes individuales de una sola persona, o una lista de
    283  elementos de texto de una sola lnea. Para lograr esto, puedes usar
    284 ({@link android.app.Notification.InboxStyle InboxStyle} o
    285 {@link android.app.Notification.BigTextStyle BigTextStyle})
    286 .
    287 </p>
    288 
    289 <h3 id ="post">Visualizacin de notificaciones integradas</h3>
    290 
    291 <p>
    292   La aplicacin siempre debe publicar un resumen del grupo, an si el grupo contiene una sola
    293  notificacin secundaria. Si contiene una sola notificacin, el sistema suprimir el resumen y mostrar directamente la
    294   notificacin secundaria. Esto garantiza
    295   que el sistema pueda proporcionar una experiencia uniforme cuando el usuario quita con un gesto de "deslizar" notificaciones
    296   secundarias de un grupo.
    297 </p>
    298 
    299 <p class="note">
    300   <strong>Nota:</strong> Esta versin de Android N an no
    301   suprime el resumen para los grupos de notificaciones que contienen una sola notificacin secundaria. Esta
    302   funcionalidad se agregar en una versin posterior de Android N.
    303 </p>
    304 
    305 <h3>Inspeccin de notificaciones</h3>
    306 
    307 <p>Si bien el sistema generalmente muestra las notificaciones secundarias como un grupo, puedes configurarlas
    308  para que aparezcan temporalmente como
    309  <a href="{@docRoot}guide/topics/ui/notifiers/notifications.html#Heads-up">
    310  notificaciones emergentes</a>. Esta funcin es especialmente til porque permite
    311   el acceso inmediato a la notificacin secundaria ms reciente y a las acciones asociadas a ella.
    312 </p>
    313 
    314 
    315 <h3>Compatibilidad con versiones anteriores</h3>
    316 
    317 <p>
    318   Tanto los grupos de notificaciones como las entradas remotas han formado parte de la API {@link
    319   android.app.Notification} desde Android 5.0 (API nivel 21) para soportar dispositivos
    320   con Android Wear. Si ya compilaste notificaciones con esas API,
    321   lo nico que debes hacer es verificar que el comportamiento de la aplicacin concuerde
    322   las pautas antes descritas y considerar la implementacin de {@code
    323   setRemoteInputHistory()}.
    324 </p>
    325 
    326 <p>
    327   Para poder ser compatible con versiones anteriores, estn disponibles las mismas API con
    328   la clase {@link android.support.v4.app.NotificationCompat}
    329   de la biblioteca de soporte, que te permite crear notificaciones que funcionan en versiones de Android
    330   anteriores. En dispositivos porttiles y tablets, los usuarios solo ven la notificacin de resumen
    331   de modo que una aplicacin an debe tener un estilo de bandeja de entrada o una notificacin equivalente
    332   que represente todo el contenido del grupo. Dado que los dispositivos con Android
    333   Wear permiten a los usuarios ver todas las notificaciones secundarias incluso en
    334   niveles anteriores de la plataforma, debes crear notificaciones secundarias independientemente del nivel de
    335   API.
    336 </p>
    337 
    338 <h2 id="custom"> Vistas personalizadas</h2>
    339 <p>A partir de la versin Android N, puedes personalizar vistas de notificaciones y
    340 an obtener decoraciones del sistema, como encabezados de notificaciones, acciones y diseos
    341 expandibles.</p>
    342 
    343 <p>Para habilitar esta caracterstica, Android N suma las siguientes API para que puedas disear tu
    344   vista personalizada:</p>
    345 
    346 <dl>
    347 <dt>
    348 {@code DecoratedCustomViewStyle()}</dt>
    349 <dd> Permite disear notificaciones que no sean notificaciones
    350 de medios.</dd>
    351 <dt>
    352 {@code DecoratedMediaCustomViewStyle()}</dt>
    353 <dd> Permite disear notificaciones de medios.</dd>
    354 </dl>
    355 
    356 <p>Para usar esta nueva API, llama al mtodo {@code setStyle()} y psale
    357 el estilo de la vista personalizada que hayas elegido.</p>
    358 
    359 <p>Este fragmento muestra cmo crear un objeto de notificacin personalizada con el mtodo
    360 {@code DecoratedCustomViewStyle()}.</p>
    361 
    362 <pre>
    363 Notification notification = new Notification.Builder()
    364            .setSmallIcon(R.drawable.ic_stat_player)
    365            .setLargeIcon(albumArtBitmap))
    366            .setCustomContentView(contentView);
    367            .setStyle(new Notification.DecoratedCustomViewStyle())
    368            .build();
    369 
    370 </pre>
    371 
    372 <h2 id="style">Estilo de mensajera</h2>
    373 <p>
    374   Android N presenta una nueva API para personalizar el estilo de una notificacin.
    375   Por medio de la clase <code>MessageStyle</code>, puedes modificar varias de las
    376  etiquetas que aparecen en la notificacin, incluidos el ttulo de la conversacin,
    377  mensajes adicionales y la vista de contenido para la notificacin.
    378 </p>
    379 
    380 <p>
    381   El siguiente fragmento de cdigo demuestra cmo personalizar el estilo
    382  de una notificacin mediante la clase <code>MessageStyle</code>.
    383 </p>
    384 
    385 <pre>
    386   Notification notification = new Notification.Builder()
    387              .setStyle(new Notification.MessagingStyle("Me")
    388                  .setConversationTitle("Team lunch")
    389                  .addMessage("Hi", timestamp1, null) // Pass in null for user.
    390                  .addMessage("What's up?", timestamp2, "Coworker")
    391                  .addMessage("Not much", timestamp3, null)
    392                  .addMessage("How about lunch?", timestamp4, "Coworker"));
    393 </pre>
    394