blob: 72c2fe61852203b2b5f71ef02440a942ba33c2e9 [file] [log] [blame]
page.title=Notificações
page.tags=notificações
helpoutsWidget=true
page.image=/preview/images/notifications-card.png
trainingnavtop=true
@jd:body
<div id="qv-wrapper">
<div id="qv">
<!-- table of contents -->
<h2>Este documento inclui</h2>
<ol>
<li><a href="#direct">Resposta direta</a></li>
<li><a href="#bundle">Notificações empacotadas</a></li>
<li><a href="#custom">Visualizações personalizadas</a></li>
<li><a href="#style">Estilo de mensagem</a></li>
</ol>
</div>
</div>
<p>O Android N introduz diversas APIs novas que permitem que aplicativos publiquem
notificações altamente visíveis e interativas.</p>
<p>O Android N estende a API de notificação {@link android.support.v4.app.RemoteInput}
atual para permitir respostas em linha em celulares. Esse recurso permite que os usuários
respondam rapidamente na aba de notificações sem acessar o aplicativo.</p>
<p>
O Android N permite empacotar notificações semelhantes para
exibição como única notificação. Para que isso seja possível, o Android N usa o método {@link
android.support.v4.app.NotificationCompat.Builder#setGroup
NotificationCompat.Builder.setGroup()} existente. Os usuários podem expandir todas as
notificações, executando ações como responder e descartar em cada uma
delas individualmente na aba de notificações.
</p>
<p>Por fim, o Android N também adiciona várias APIs que permitem usar decorações
do sistema nas visualizações de notificação personalizadas do aplicativo. Essas APIs ajudam
a garantir que as visualizações de notificação compartilhem uma apresentação consistente com os
modelos padrão.</p>
<p>Este documento destaca algumas principais mudanças que você deve considerar
ao usar os novos recursos de notificação em aplicativos.</p>
<h2 id="direct">Resposta direta</h2>
<p>Com o recurso de resposta direta no Android N, os usuários podem responder
rapidamente a mensagens de texto ou atualizar listas de tarefas diretamente na interface de
notificação. Em um dispositivo portátil, a ação de resposta em linha aparece como botão adicional
anexado à notificação. Quando um usuário responde pelo teclado, o sistema anexa
a resposta de texto à intenção especificada como ação de notificação e envia a intenção ao aplicativo no dispositivo.
<img id="fig-reply-button" src="{@docRoot}preview/images/inline-reply.png" srcset="{@docRoot}preview/images/inline-reply.png 1x,
{@docRoot}preview/images/inline-reply_2x.png 2x" width="400">
<p class="img-caption">
<strong>Figura 1.</strong>O Android N adiciona o botão de ação <strong>Reply</strong>
.
</p>
<h3>Adição de ações de resposta em linha</h3>
<p>Para criar uma ação de notificação com suporte à resposta direta:
</p>
<ol>
<li>Crie uma instância de {@link android.support.v4.app.RemoteInput.Builder}
que possa ser adicionada à ação de
notificação. O construtor dessa classe aceita uma string, usada pelo sistema como chave
da entrada de texto. Posteriormente, o aplicativo no dispositivo usará essa chave para recuperar o texto
da entrada.
<pre>
// Key for the string that's delivered in the action's intent.
private static final String KEY_TEXT_REPLY = "key_text_reply";
String replyLabel = getResources().getString(R.string.reply_label);
RemoteInput remoteInput = new RemoteInput.Builder(KEY_TEXT_REPLY)
.setLabel(replyLabel)
.build();
</pre>
</li>
<li>Anexe o objeto {@link android.support.v4.app.RemoteInput}
a uma ação usando <code>addRemoteInput()</code>.
<pre>
// Create the reply action and add the remote input.
Notification.Action action =
new Notification.Action.Builder(R.drawable.ic_reply_icon,
getString(R.string.label), replyPendingIntent)
.addRemoteInput(remoteInput)
.build();
</pre>
</li>
<li>Aplique a ação a uma notificação e emita a notificação.
<pre>
// Build the notification and add the action.
Notification newMessageNotification =
new Notification.Builder(mContext)
.setSmallIcon(R.drawable.ic_message)
.setContentTitle(getString(R.string.title))
.setContentText(getString(R.string.content))
.addAction(action))
.build();
// Issue the notification.
NotificationManager notificationManager =
NotificationManager.from(mContext);
notificationManager.notify(notificationId, newMessageNotification);
</pre>
</li>
</ol>
<p> O sistema solicita que o usuário informe uma resposta quando acionar a
ação de notificação. </p>
<img id="fig-user-input" src="{@docRoot}preview/images/inline-type-reply.png" srcset="{@docRoot}preview/images/inline-type-reply.png 1x,
{@docRoot}preview/images/inline-type-reply_2x.png 2x" width="300">
<p class="img-caption">
<strong>Figura 2.</strong> O usuário insere texto na aba de notificações.
</p>
<h3>
Recuperação da entrada do usuário na resposta em linha
</h3>
<p>
Para receber a entrada do usuário da interface de notificação para a atividade
declarada na intenção de ação de resposta:
</p>
<ol>
<li>Chame {@link android.support.v4.app.RemoteInput#getResultsFromIntent
getResultsFromIntent()} passando a intenção da ação de notificação como
parâmetro de entrada. Esse método retorna um {@link android.os.Bundle} que
contém a resposta de texto.
<pre>
Bundle remoteInput = RemoteInput.getResultsFromIntent(intent);
</pre>
</li>
<li>Consulte a resposta usando a chave de resultado (fornecida ao construtor {@link
android.support.v4.app.RemoteInput.Builder}). Você pode concluir
este processo e recuperar o texto de entrada criando um método, como no
snippet de código a seguir:
<pre>
// Obtain the intent that started this activity by calling
// Activity.getIntent() and pass it into this method to
// get the associated string.
private CharSequence getMessageText(Intent intent) {
Bundle remoteInput = RemoteInput.getResultsFromIntent(intent);
if (remoteInput != null) {
return remoteInput.getCharSequence(KEY_TEXT_REPLY);
}
return null;
}
</pre>
</li>
<li>Crie e emita outra notificação usando o mesmo código que
você forneceu para a notificação anterior. O indicador de progresso
desaparece da interface de notificação para informar os usuários que houve uma resposta
bem-sucedida. Ao trabalhar com esta nova notificação, use o contexto que é passado
ao método {@code onReceive()} do receptor.
<pre>
// Build a new notification, which informs the user that the system
// handled their interaction with the previous notification.
Notification repliedNotification =
new Notification.Builder(context)
.setSmallIcon(R.drawable.ic_message)
.setContentText(getString(R.string.replied))
.build();
// Issue the new notification.
NotificationManager notificationManager =
NotificationManager.from(context);
notificationManager.notify(notificationId, repliedNotification);
</pre>
</li>
</ol>
<p>
Para aplicativos interativos, como bate-papos, pode ser útil incluir contexto
adicional ao lidar com texto recebido. Por exemplo, estes aplicativos podem exibir
várias linhas de histórico de bate-papo. Quando o usuário responde por {@link
android.support.v4.app.RemoteInput}, você pode atualizar o histórico de respostas
usando o método {@code setRemoteInputHistory()}.
</p>
<p>
A notificação precisará ser atualizada ou cancelada depois que o aplicativo tiver
recebido a entrada remota. Quando o usuário responde a uma atualização remota
usando uma Resposta direta,
não cancele a notificação. Em vez disso, atualize a notificação para exibir a resposta do usuário.
Para notificações que usam {@code MessagingStyle}, adicione
a resposta como última mensagem. Ao usar outros modelos, você pode
anexar a resposta do usuário ao histórico da entrada remota.
</p>
<h2 id="bundle">Notificações empacotadas</h2>
<p>O Android N oferece aos desenvolvedores uma nova forma de representar
uma fila de notificações: <i>notificações empacotadas</i>. Essa forma é semelhante ao recurso
<a href="{@docRoot}training/wearables/notifications/stacks.html">Pilhas
de Notificações</a> no Android Wear. Por exemplo, se o aplicativo criar notificações
para mensagens recebidas, quando mais de uma mensagem for recebida, empacote as
notificações como um único grupo. Você pode
usar o método existente {@link android.support.v4.app.NotificationCompat.Builder#setGroup
Builder.setGroup()} para empacotar notificações semelhantes.</p>
<p>
Um grupo de notificações impõe uma hierarquia nas notificações que o compõe.
Na parte superior dessa hierarquia, está a notificação pai, que exibe informações
resumidas para o grupo. O usuário pode expandir
progressivamente o grupo de notificações e o sistema mostra mais informações à medida que o
usuário aumenta o detalhamento. Quando o usuário expande o pacote, o sistema revela
mais informações para todas as notificações filhas. Quando o usuário
expande uma das notificações, o sistema revela todo o seu conteúdo.
</p>
<img id="fig-bundles" src="{@docRoot}preview/images/bundles.png" srcset="{@docRoot}preview/images/bundles.png 1x,
{@docRoot}preview/images/bundles_2x.png 2x" width="300">
<p class="img-caption">
<strong>Figura 3.</strong> O usuário pode expandir progressivamente o grupo
de notificações.
</p>
<p class="note">
<strong>Observação:</strong> Se o mesmo aplicativo enviar quatro ou mais notificações
e não especificar um agrupamento, o
sistema as agrupará automaticamente.
</p>
<p>Para saber como adicionar notificações a um grupo, consulte
<a href="{@docRoot}training/wearables/notifications/stacks.html#AddGroup">Adicionar
cada notificação a um grupo</a>.</p>
<h3 id="best-practices">Práticas recomendadas para notificações empacotadas</h3>
<p>Esta seção oferece diretrizes sobre quando usar grupos de notificações em vez
de notificações {@link android.app.Notification.InboxStyle InboxStyle}
que foram disponibilizadas em versões anteriores da
plataforma Android.</p>
<h3>Quando usar notificações empacotadas</h3>
<p>Você deve usar grupos de notificações apenas quando todas as condições a seguir forem
verdadeiras para o seu caso de uso:</p>
<ul>
<li>As notificações filhas são notificações completas e podem ser exibidas
individualmente sem necessidade de um resumo do grupo.</li>
<li>A exibição individual de notificações filhas pode ser vantajosa. Por
exemplo:
</li>
<ul>
<li>Elas são acionáveis, sem ações específicas para cada filha.</li>
<li>Há mais informações na filha que as que o usuário quer ler.</li>
</ul>
</ul>
<p>Os exemplos de bons casos de uso para grupos de notificações incluem: um aplicativo de mensagens
exibindo uma lista de mensagens recebidas ou um aplicativo de e-mail exibindo uma lista de
e-mails recebidos.</p>
<p>
Os exemplos de casos em que uma única notificação é preferível
incluem mensagens individuais de uma única pessoa ou uma representação em lista
de itens de texto com uma única linha. Você pode usar
({@link android.app.Notification.InboxStyle InboxStyle} ou
{@link android.app.Notification.BigTextStyle BigTextStyle}) para
isso.
</p>
<h3 id ="post">Exibição de notificações empacotadas</h3>
<p>
O aplicativo deve sempre publicar um resumo do grupo, mesmo se o grupo tiver apenas uma
única filha. O sistema suprimirá o resumo e exibirá diretamente a
notificação filha se ela contiver apenas uma única notificação. Isso garante
que o sistema possa oferecer uma experiência consistente quando o usuário deslizar por
filhas de um grupo.
</p>
<p class="note">
<strong>Observação:</strong> esta versão do Android N ainda não
elimina o resumo de grupos de notificações contendo uma única filha. Essa
funcionalidade será adicionada em uma versão posterior do Android N.
</p>
<h3>Observação de notificações</h3>
<p>Embora o sistema normalmente exiba notificações filhas como grupo, você pode
configurá-las para exibição temporária como
<a href="{@docRoot}guide/topics/ui/notifiers/notifications.html#Heads-up">
notificações heads-up</a>. Esse recurso é particularmente útil porque permite
acesso imediato à filha mais recente e a suas ações associadas.
</p>
<h3>Compatibilidade com versões anteriores</h3>
<p>
Os grupos de notificações e as entradas remotas fazem parte da API {@link
android.app.Notification} desde o Android 5.0 (nível da API 21) para oferecer suporte a
dispositivos Android Wear. Se você já criou notificações com essas APIs,
a única ação necessária é verificar se o comportamento do aplicativo corresponde
às diretrizes descritas acima e considerar a implementação de {@code
setRemoteInputHistory()}.
</p>
<p>
Para compatibilidade com versões anteriores, as mesmas APIs estão disponíveis com
a classe {@link android.support.v4.app.NotificationCompat} da biblioteca de suporte,
permitindo criar notificações que funcionem em versões anteriores do
Android. Em celulares e tablets, os usuários somente visualizam as notificações resumidas.
Portanto, um aplicativo deve ter uma notificação no estilo de caixa de entrada ou equivalente,
representativa de todo o conteúdo de informações do grupo. Como os dispositivos Android
Wear permitem que os usuários vejam todas as notificações filhas, mesmo em níveis
de plataforma antigos, você deve criar notificações filhas independentemente do nível
da API.
</p>
<h2 id="custom"> Visualizações personalizadas</h2>
<p>Começando com o Android N, é possível personalizar visualizações de notificação e
continuar obtendo decorações de sistema, como cabeçalhos de notificação, ações e layouts
expansíveis.</p>
<p>Para ativar esses recursos, o Android N adiciona as seguintes APIs para aplicar estilo à
visualização personalizada:</p>
<dl>
<dt>
{@code DecoratedCustomViewStyle()}</dt>
<dd> Aplica estilo a notificações que não sejam notificações
de mídia.</dd>
<dt>
{@code DecoratedMediaCustomViewStyle()}</dt>
<dd> Aplica estilo a notificações de mídia.</dd>
</dl>
<p>Para usar essa nova API, chame o método {@code setStyle()}, passando o
estilo de visualização personalizada desejado.</p>
<p>O snippet mostra como construir um objeto de notificação personalizada com o método
{@code DecoratedCustomViewStyle()}.</p>
<pre>
Notification notification = new Notification.Builder()
.setSmallIcon(R.drawable.ic_stat_player)
.setLargeIcon(albumArtBitmap))
.setCustomContentView(contentView);
.setStyle(new Notification.DecoratedCustomViewStyle())
.build();
</pre>
<h2 id="style">Estilo de mensagens</h2>
<p>
O Android N traz uma nova API para personalização do estilo de uma notificação.
Usando a classe <code>MessageStyle</code>, você pode alterar vários
rótulos exibidos na notificação, incluindo o título da conversa,
mensagens adicionais e a visualização de conteúdo para a notificação.
</p>
<p>
O seguinte snippet de código demonstra como personalizar o estilo de uma
notificação usando a classe <code>MessageStyle</code>.
</p>
<pre>
Notification notification = new Notification.Builder()
.setStyle(new Notification.MessagingStyle("Me")
.setConversationTitle("Team lunch")
.addMessage("Hi", timestamp1, null) // Pass in null for user.
.addMessage("What's up?", timestamp2, "Coworker")
.addMessage("Not much", timestamp3, null)
.addMessage("How about lunch?", timestamp4, "Coworker"));
</pre>