As notificações no android são exibidas normalmente com um título e uma linha de texto, mas existem situações em que é necessário atualizar a notificação, como no caso das notificações que informam a chegada de e-mail. Por exemplo, quando chega mais de um e-mail a notificação pode exibir quantas mensagens chegaram até o momento e o assunto de cada mensagem.
Dando continuidade ao post Como Exibir Notificações no Android - Parte I, este post mostra como exibir notificações, utilizando um estilo grande, onde são exibidas mais de uma linha de informação, e como cancelar programaticamente as notificações sendo exibidas para o usuário.
As notificações em estilo grande somente serão exibidas em dispositivos android versão 4.1 (API 16) ou superior. Para demonstrar como exibir a notificação em estilo grande foi criado um projeto de uma Activity com os botões Criar Notificação, Atualizar Notificação e Fechar Notificação.
O botão Criar Notificação chama o método
criaNotificacao()
que inicializa a variável mBuilder
do tipo Notification.Builder, com as informações de ícone, título e texto, e exibe uma notificação simples através do método notifica()
. Este método além de exibir a notificação utilizando o método notify(int, Notification) da classe NotificationManager, também configura o valor da identificação da notificação.private void criaNotificacao(){ // Cria a notificação com as informações de // ícone, título e texto mBuilder = new Notification.Builder(this) .setSmallIcon(R.drawable.ic_notification_romar) .setContentTitle("Notificação Estilo Grande") .setContentText("Estilo diferente..."); // Inicializa o número de mensagens numMensagens = 0; // Exibe a notificação notifica(); } private void notifica() { NotificationManager mNotificationManager = (NotificationManager) getSystemService (Context.NOTIFICATION_SERVICE); // A constante NOTIFICACAO_TESTE é uma identificação // que pode ser utilizada para atualizar a notificação posteriormente mNotificationManager.notify(NOTIFICACAO_TESTE, mBuilder.build()); }Quando o botão Criar Notificação é clicado a seguinte notificação é exibida no dispositivo:
Até este momento está sendo exibida uma notificação em estilo normal, porque foi configurado somente a notificação padrão. Para exibir uma notificação em estilo grande optei em inserir várias linhas de mensagens na mesma notificação, simulando a chegada de uma nova mensagem.
Atualizar a Notificação
Para executar esta função foi criado o botão Atualizar Notificação, que tem por tarefa inserir uma linha de mensagem cada vez que o botão for pressionado, este botão chama o método
atualizaNotificacao()
. Este método configura o título, insere as mensagens em uma lista e configura o número de mensagens que foram inseridas.private void atualizaNotificacao() { Notification.InboxStyle inboxStyle = new Notification.InboxStyle(); // Define o título para a mensagem de estilo grande inboxStyle.setBigContentTitle("Exibe várias Mensagens"); // Incrementa o número de mensagens numMensagens++; // Insere a mensagem na lista de mensagens listaMensagens.add("Mensagem de notificação " + String.valueOf(numMensagens)); // Escreve a mensagem for (String mensagem : listaMensagens) { inboxStyle.addLine(mensagem); } // Configura o estilo na notificação. mBuilder.setStyle(inboxStyle); // Atualiza o número de notificações sendo exibida mBuilder.setNumber(numMensagens); // Exibe a notificação notifica(); }
Cada vez que o botão Atualizar Notificação for clicado uma mensagem é inserida na notificação existente, porque estamos atualizando sempre a notificação com a mesma identificação. Se por exemplo clicarmos 5 vezes no botão a notificação fica com a seguinte aparência:
Observe que a notificação é apresentada com o título, o texto padrão e o número 5 no canto direito, indicando que existem mais mensagens a serem visualizadas. Note que a notificação criada pelo programa está sendo exibida no meio de outras duas notificações. Quando isto ocorre é necessário expandir a notificação, utilizando o movimento de pinça com os dedos, para visualizar todas as mensagens, como exibida na figura abaixo:
Uma observação importante é que, a notificação só vai ser apresentada em estilo grande expandido se for a primeira notificação da lista de notificações.
A notificação pode ser cancelada programaticamente de várias formas. Podemos configurar a notificação para que seja cancelada no momento em que é clicada durante a visualização, utilizando o método setAutoCancel(boolean) da classe Notification.Builder, que pode ser configurado no momento da criação da notificação. No caso do projeto deste post bastaria utilizar o objeto
mBuilder
para configurar o método da seguinte forma: mBuilder.setAutoCancel(true);
Uma outra forma de cancelar a notificação é utilizar o método cancel(int) da classe NotificationManager. Para demonstrar como utilizar este método foi criado o botão Fechar Notificação que cancela a notificação sendo exibida. O botão chama o método cancelaNotificacao()
que cancela a notificação, passando para o método cancel(int) a constante NOTIFICACAO_TESTE
que foi criada para identificar a notificação. Este método também apaga a lista de mensagens que foi criada para armazenar cada mensagem gerada.private void cancelaNotificacao(){ // Cancela a notificação NotificationManager mNotificationManager = (NotificationManager) getSystemService (Context.NOTIFICATION_SERVICE); mNotificationManager.cancel(NOTIFICACAO_TESTE); // Apaga a lista de mensagens listaMensagens.clear(); }