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