1 page.title=Notificaes 2 page.tags=notificaes 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 inclui</h2> 15 <ol> 16 <li><a href="#direct">Resposta direta</a></li> 17 <li><a href="#bundle">Notificaes empacotadas</a></li> 18 <li><a href="#custom">Visualizaes personalizadas</a></li> 19 <li><a href="#style">Estilo de mensagem</a></li> 20 </ol> 21 22 </div> 23 </div> 24 25 <p>O Android N introduz diversas APIs novas que permitem que aplicativos publiquem 26 notificaes altamente visveis e interativas.</p> 27 28 <p>O Android N estende a API de notificao {@link android.support.v4.app.RemoteInput} 29 atual para permitir respostas em linha em celulares. Esse recurso permite que os usurios 30 respondam rapidamente na aba de notificaes sem acessar o aplicativo.</p> 31 32 <p> 33 O Android N permite empacotar notificaes semelhantes para 34 exibio como nica notificao. Para que isso seja possvel, o Android N usa o mtodo {@link 35 android.support.v4.app.NotificationCompat.Builder#setGroup 36 NotificationCompat.Builder.setGroup()} existente. Os usurios podem expandir todas as 37 notificaes, executando aes como responder e descartar em cada uma 38 delas individualmente na aba de notificaes. 39 </p> 40 41 <p>Por fim, o Android N tambm adiciona vrias APIs que permitem usar decoraes 42 do sistema nas visualizaes de notificao personalizadas do aplicativo. Essas APIs ajudam 43 a garantir que as visualizaes de notificao compartilhem uma apresentao consistente com os 44 modelos padro.</p> 45 46 <p>Este documento destaca algumas principais mudanas que voc deve considerar 47 ao usar os novos recursos de notificao em aplicativos.</p> 48 49 <h2 id="direct">Resposta direta</h2> 50 51 <p>Com o recurso de resposta direta no Android N, os usurios podem responder 52 rapidamente a mensagens de texto ou atualizar listas de tarefas diretamente na interface de 53 notificao. Em um dispositivo porttil, a ao de resposta em linha aparece como boto adicional 54 anexado notificao. Quando um usurio responde pelo teclado, o sistema anexa 55 a resposta de texto inteno especificada como ao de notificao e envia a inteno ao aplicativo no dispositivo. 56 57 58 <img id="fig-reply-button" src="{@docRoot}preview/images/inline-reply.png" srcset="{@docRoot}preview/images/inline-reply.png 1x, 59 {@docRoot}preview/images/inline-reply_2x.png 2x" width="400"> 60 <p class="img-caption"> 61 <strong>Figura 1.</strong>O Android N adiciona o boto de ao <strong>Reply</strong> 62 . 63 </p> 64 65 <h3>Adio de aes de resposta em linha</h3> 66 67 <p>Para criar uma ao de notificao com suporte resposta direta: 68 </p> 69 70 <ol> 71 <li>Crie uma instncia de {@link android.support.v4.app.RemoteInput.Builder} 72 que possa ser adicionada ao de 73 notificao. O construtor dessa classe aceita uma string, usada pelo sistema como chave 74 da entrada de texto. Posteriormente, o aplicativo no dispositivo usar essa chave para recuperar o texto 75 da entrada. 76 77 <pre> 78 // Key for the string that's delivered in the action's intent. 79 private static final String KEY_TEXT_REPLY = "key_text_reply"; 80 String replyLabel = getResources().getString(R.string.reply_label); 81 RemoteInput remoteInput = new RemoteInput.Builder(KEY_TEXT_REPLY) 82 .setLabel(replyLabel) 83 .build(); 84 </pre> 85 </li> 86 <li>Anexe o objeto {@link android.support.v4.app.RemoteInput} 87 a uma ao usando <code>addRemoteInput()</code>. 88 89 <pre> 90 // Create the reply action and add the remote input. 91 Notification.Action action = 92 new Notification.Action.Builder(R.drawable.ic_reply_icon, 93 getString(R.string.label), replyPendingIntent) 94 .addRemoteInput(remoteInput) 95 .build(); 96 </pre> 97 </li> 98 99 <li>Aplique a ao a uma notificao e emita a notificao. 100 101 <pre> 102 // Build the notification and add the action. 103 Notification newMessageNotification = 104 new Notification.Builder(mContext) 105 .setSmallIcon(R.drawable.ic_message) 106 .setContentTitle(getString(R.string.title)) 107 .setContentText(getString(R.string.content)) 108 .addAction(action)) 109 .build(); 110 111 // Issue the notification. 112 NotificationManager notificationManager = 113 NotificationManager.from(mContext); 114 notificationManager.notify(notificationId, newMessageNotification); 115 116 </pre> 117 </li> 118 119 </ol> 120 121 122 <p> O sistema solicita que o usurio informe uma resposta quando acionar a 123 ao de notificao. </p> 124 125 <img id="fig-user-input" src="{@docRoot}preview/images/inline-type-reply.png" srcset="{@docRoot}preview/images/inline-type-reply.png 1x, 126 {@docRoot}preview/images/inline-type-reply_2x.png 2x" width="300"> 127 <p class="img-caption"> 128 <strong>Figura 2.</strong> O usurio insere texto na aba de notificaes. 129 </p> 130 131 <h3> 132 Recuperao da entrada do usurio na resposta em linha 133 </h3> 134 135 <p> 136 Para receber a entrada do usurio da interface de notificao para a atividade 137 declarada na inteno de ao de resposta: 138 </p> 139 140 <ol> 141 <li>Chame {@link android.support.v4.app.RemoteInput#getResultsFromIntent 142 getResultsFromIntent()} passando a inteno da ao de notificao como 143 parmetro de entrada. Esse mtodo retorna um {@link android.os.Bundle} que 144 contm a resposta de texto. 145 146 <pre> 147 Bundle remoteInput = RemoteInput.getResultsFromIntent(intent); 148 </pre> 149 </li> 150 151 <li>Consulte a resposta usando a chave de resultado (fornecida ao construtor {@link 152 android.support.v4.app.RemoteInput.Builder}). Voc pode concluir 153 este processo e recuperar o texto de entrada criando um mtodo, como no 154 snippet de cdigo a seguir: 155 156 <pre> 157 // Obtain the intent that started this activity by calling 158 // Activity.getIntent() and pass it into this method to 159 // get the associated string. 160 161 private CharSequence getMessageText(Intent intent) { 162 Bundle remoteInput = RemoteInput.getResultsFromIntent(intent); 163 if (remoteInput != null) { 164 return remoteInput.getCharSequence(KEY_TEXT_REPLY); 165 } 166 return null; 167 } 168 </pre> 169 </li> 170 171 <li>Crie e emita outra notificao usando o mesmo cdigo que 172 voc forneceu para a notificao anterior. O indicador de progresso 173 desaparece da interface de notificao para informar os usurios que houve uma resposta 174 bem-sucedida. Ao trabalhar com esta nova notificao, use o contexto que passado 175 ao mtodo {@code onReceive()} do receptor. 176 177 <pre> 178 // Build a new notification, which informs the user that the system 179 // handled their interaction with the previous notification. 180 Notification repliedNotification = 181 new Notification.Builder(context) 182 .setSmallIcon(R.drawable.ic_message) 183 .setContentText(getString(R.string.replied)) 184 .build(); 185 186 // Issue the new notification. 187 NotificationManager notificationManager = 188 NotificationManager.from(context); 189 notificationManager.notify(notificationId, repliedNotification); 190 </pre> 191 </li> 192 </ol> 193 194 <p> 195 Para aplicativos interativos, como bate-papos, pode ser til incluir contexto 196 adicional ao lidar com texto recebido. Por exemplo, estes aplicativos podem exibir 197 vrias linhas de histrico de bate-papo. Quando o usurio responde por {@link 198 android.support.v4.app.RemoteInput}, voc pode atualizar o histrico de respostas 199 usando o mtodo {@code setRemoteInputHistory()}. 200 </p> 201 202 <p> 203 A notificao precisar ser atualizada ou cancelada depois que o aplicativo tiver 204 recebido a entrada remota. Quando o usurio responde a uma atualizao remota 205 usando uma Resposta direta, 206 no cancele a notificao. Em vez disso, atualize a notificao para exibir a resposta do usurio. 207 Para notificaes que usam {@code MessagingStyle}, adicione 208 a resposta como ltima mensagem. Ao usar outros modelos, voc pode 209 anexar a resposta do usurio ao histrico da entrada remota. 210 </p> 211 212 <h2 id="bundle">Notificaes empacotadas</h2> 213 214 <p>O Android N oferece aos desenvolvedores uma nova forma de representar 215 uma fila de notificaes: <i>notificaes empacotadas</i>. Essa forma semelhante ao recurso 216 <a href="{@docRoot}training/wearables/notifications/stacks.html">Pilhas 217 de Notificaes</a> no Android Wear. Por exemplo, se o aplicativo criar notificaes 218 para mensagens recebidas, quando mais de uma mensagem for recebida, empacote as 219 notificaes como um nico grupo. Voc pode 220 usar o mtodo existente {@link android.support.v4.app.NotificationCompat.Builder#setGroup 221 Builder.setGroup()} para empacotar notificaes semelhantes.</p> 222 223 <p> 224 Um grupo de notificaes impe uma hierarquia nas notificaes que o compe. 225 Na parte superior dessa hierarquia, est a notificao pai, que exibe informaes 226 resumidas para o grupo. O usurio pode expandir 227 progressivamente o grupo de notificaes e o sistema mostra mais informaes medida que o 228 usurio aumenta o detalhamento. Quando o usurio expande o pacote, o sistema revela 229 mais informaes para todas as notificaes filhas. Quando o usurio 230 expande uma das notificaes, o sistema revela todo o seu contedo. 231 </p> 232 233 <img id="fig-bundles" src="{@docRoot}preview/images/bundles.png" srcset="{@docRoot}preview/images/bundles.png 1x, 234 {@docRoot}preview/images/bundles_2x.png 2x" width="300"> 235 <p class="img-caption"> 236 <strong>Figura 3.</strong> O usurio pode expandir progressivamente o grupo 237 de notificaes. 238 </p> 239 240 <p class="note"> 241 <strong>Observao:</strong> Se o mesmo aplicativo enviar quatro ou mais notificaes 242 e no especificar um agrupamento, o 243 sistema as agrupar automaticamente. 244 </p> 245 246 <p>Para saber como adicionar notificaes a um grupo, consulte 247 <a href="{@docRoot}training/wearables/notifications/stacks.html#AddGroup">Adicionar 248 cada notificao a um grupo</a>.</p> 249 250 251 <h3 id="best-practices">Prticas recomendadas para notificaes empacotadas</h3> 252 <p>Esta seo oferece diretrizes sobre quando usar grupos de notificaes em vez 253 de notificaes {@link android.app.Notification.InboxStyle InboxStyle} 254 que foram disponibilizadas em verses anteriores da 255 plataforma Android.</p> 256 257 <h3>Quando usar notificaes empacotadas</h3> 258 259 <p>Voc deve usar grupos de notificaes apenas quando todas as condies a seguir forem 260 verdadeiras para o seu caso de uso:</p> 261 262 <ul> 263 <li>As notificaes filhas so notificaes completas e podem ser exibidas 264 individualmente sem necessidade de um resumo do grupo.</li> 265 <li>A exibio individual de notificaes filhas pode ser vantajosa. Por 266 exemplo: 267 </li> 268 <ul> 269 <li>Elas so acionveis, sem aes especficas para cada filha.</li> 270 <li>H mais informaes na filha que as que o usurio quer ler.</li> 271 </ul> 272 </ul> 273 274 <p>Os exemplos de bons casos de uso para grupos de notificaes incluem: um aplicativo de mensagens 275 exibindo uma lista de mensagens recebidas ou um aplicativo de e-mail exibindo uma lista de 276 e-mails recebidos.</p> 277 278 <p> 279 Os exemplos de casos em que uma nica notificao prefervel 280 incluem mensagens individuais de uma nica pessoa ou uma representao em lista 281 de itens de texto com uma nica linha. Voc pode usar 282 ({@link android.app.Notification.InboxStyle InboxStyle} ou 283 {@link android.app.Notification.BigTextStyle BigTextStyle}) para 284 isso. 285 </p> 286 287 <h3 id ="post">Exibio de notificaes empacotadas</h3> 288 289 <p> 290 O aplicativo deve sempre publicar um resumo do grupo, mesmo se o grupo tiver apenas uma 291 nica filha. O sistema suprimir o resumo e exibir diretamente a 292 notificao filha se ela contiver apenas uma nica notificao. Isso garante 293 que o sistema possa oferecer uma experincia consistente quando o usurio deslizar por 294 filhas de um grupo. 295 </p> 296 297 <p class="note"> 298 <strong>Observao:</strong> esta verso do Android N ainda no 299 elimina o resumo de grupos de notificaes contendo uma nica filha. Essa 300 funcionalidade ser adicionada em uma verso posterior do Android N. 301 </p> 302 303 <h3>Observao de notificaes</h3> 304 305 <p>Embora o sistema normalmente exiba notificaes filhas como grupo, voc pode 306 configur-las para exibio temporria como 307 <a href="{@docRoot}guide/topics/ui/notifiers/notifications.html#Heads-up"> 308 notificaes heads-up</a>. Esse recurso particularmente til porque permite 309 acesso imediato filha mais recente e a suas aes associadas. 310 </p> 311 312 313 <h3>Compatibilidade com verses anteriores</h3> 314 315 <p> 316 Os grupos de notificaes e as entradas remotas fazem parte da API {@link 317 android.app.Notification} desde o Android 5.0 (nvel da API 21) para oferecer suporte a 318 dispositivos Android Wear. Se voc j criou notificaes com essas APIs, 319 a nica ao necessria verificar se o comportamento do aplicativo corresponde 320 s diretrizes descritas acima e considerar a implementao de {@code 321 setRemoteInputHistory()}. 322 </p> 323 324 <p> 325 Para compatibilidade com verses anteriores, as mesmas APIs esto disponveis com 326 a classe {@link android.support.v4.app.NotificationCompat} da biblioteca de suporte, 327 permitindo criar notificaes que funcionem em verses anteriores do 328 Android. Em celulares e tablets, os usurios somente visualizam as notificaes resumidas. 329 Portanto, um aplicativo deve ter uma notificao no estilo de caixa de entrada ou equivalente, 330 representativa de todo o contedo de informaes do grupo. Como os dispositivos Android 331 Wear permitem que os usurios vejam todas as notificaes filhas, mesmo em nveis 332 de plataforma antigos, voc deve criar notificaes filhas independentemente do nvel 333 da API. 334 </p> 335 336 <h2 id="custom"> Visualizaes personalizadas</h2> 337 <p>Comeando com o Android N, possvel personalizar visualizaes de notificao e 338 continuar obtendo decoraes de sistema, como cabealhos de notificao, aes e layouts 339 expansveis.</p> 340 341 <p>Para ativar esses recursos, o Android N adiciona as seguintes APIs para aplicar estilo 342 visualizao personalizada:</p> 343 344 <dl> 345 <dt> 346 {@code DecoratedCustomViewStyle()}</dt> 347 <dd> Aplica estilo a notificaes que no sejam notificaes 348 de mdia.</dd> 349 <dt> 350 {@code DecoratedMediaCustomViewStyle()}</dt> 351 <dd> Aplica estilo a notificaes de mdia.</dd> 352 </dl> 353 354 <p>Para usar essa nova API, chame o mtodo {@code setStyle()}, passando o 355 estilo de visualizao personalizada desejado.</p> 356 357 <p>O snippet mostra como construir um objeto de notificao personalizada com o mtodo 358 {@code DecoratedCustomViewStyle()}.</p> 359 360 <pre> 361 Notification notification = new Notification.Builder() 362 .setSmallIcon(R.drawable.ic_stat_player) 363 .setLargeIcon(albumArtBitmap)) 364 .setCustomContentView(contentView); 365 .setStyle(new Notification.DecoratedCustomViewStyle()) 366 .build(); 367 368 </pre> 369 370 <h2 id="style">Estilo de mensagens</h2> 371 <p> 372 O Android N traz uma nova API para personalizao do estilo de uma notificao. 373 Usando a classe <code>MessageStyle</code>, voc pode alterar vrios 374 rtulos exibidos na notificao, incluindo o ttulo da conversa, 375 mensagens adicionais e a visualizao de contedo para a notificao. 376 </p> 377 378 <p> 379 O seguinte snippet de cdigo demonstra como personalizar o estilo de uma 380 notificao usando a classe <code>MessageStyle</code>. 381 </p> 382 383 <pre> 384 Notification notification = new Notification.Builder() 385 .setStyle(new Notification.MessagingStyle("Me") 386 .setConversationTitle("Team lunch") 387 .addMessage("Hi", timestamp1, null) // Pass in null for user. 388 .addMessage("What's up?", timestamp2, "Coworker") 389 .addMessage("Not much", timestamp3, null) 390 .addMessage("How about lunch?", timestamp4, "Coworker")); 391 </pre> 392