Home | History | Annotate | Download | only in features
      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