Desde o nível 16 da API (Jelly Bean), existe a possibilidade de adicionar ações a uma notificação com
builder.addAction(iconId, title, intent);
Mas quando adiciono uma ação a uma notificação e a ação é pressionada, a notificação não será descartada. Quando a notificação em si está sendo clicada, ela pode ser descartada com
notification.flags = Notification.FLAG_AUTO_CANCEL;
ou
builder.setAutoCancel(true);
Mas, obviamente, isso não tem nada a ver com as ações associadas à notificação.
Alguma dica? Ou isso ainda não faz parte da API? Não encontrei nada.
fonte
Constatou que este é um problema ao usar a notificação Heads Up Display do Lollipop. Consulte as diretrizes de design . Aqui está o código (ish) completo a ser implementado.
Até agora, ter um botão 'Dispensar' era menos importante, mas agora está mais na sua cara.
Construindo a notificação
NotificationActivity
AndroidManifest.xml (atributos necessários para impedir que o SystemUI se concentre em uma pilha traseira)
fonte
Descobri que quando você usa os botões de ação nas notificações expandidas, precisa escrever um código extra e fica mais restrito.
Você deve cancelar manualmente sua notificação quando o usuário clicar em um botão de ação. A notificação é cancelada apenas automaticamente para a ação padrão.
Além disso, se você iniciar um receptor de transmissão a partir do botão, a gaveta de notificação não fechará.
Acabei criando uma nova NotificationActivity para resolver esses problemas. Essa atividade intermediária sem interface do usuário cancela a notificação e inicia a atividade que eu realmente queria iniciar a partir da notificação.
Publiquei um código de amostra em uma postagem relacionada. Clicar em Ações de notificação do Android não fecha a gaveta de notificações .
fonte
Você sempre pode fazer
cancel()
o queNotification
quer que esteja sendo chamado pela ação (por exemplo, naonCreate()
atividade vinculada à qualPendingIntent
você forneceaddAction()
).fonte
cancel()
pega o ID doNotification
, que você usou quando ligounotify()
. Você não precisa doNotification
objeto.ACTION_VIEW
e o tipo éimage/jpeg
(para compartilhar uma imagem com outro aplicativo), como esse cancelamento deve ser acionado? O IMO Android deve cancelar automaticamente, estou confuso sobre o motivo pelo qual o Android não cuida apenas dele ?!Notification
relacionadoPendingIntent
, não foi exatamente assim que ele foi projetado para funcionar e, portanto, você terá problemas como este. "O IMO Android deve cancelar automaticamente" - eu pude oferecer uma sinalização para isso na ação, mas não deve ser uma coisa de todos os tempos. Se fosse, pular uma faixa em uma notificação do music player fecharia a notificação.Na minha opinião, usando um
BroadcastReceiver
é uma maneira mais limpa de cancelar uma notificação:No AndroidManifest.xml:
No arquivo java:
NotificationCancelReceiver
fonte
intent.putExtra()
e obtê-lo emBroadcastReceiver
Nas novas APIs, não se esqueça do TAG:
e correspondentemente
ao invés de:
https://developer.android.com/reference/android/app/NotificationManager
fonte
cancel()
função tenha 2 implementações; um com TAG e outro sem. Mas temos que fornecer umTAG
. Aqui está acancel
função dos documentospublic void cancel(@Nullable String tag, int id)
. Última verificação no Android QBasta colocar esta linha:
E o código completo é:
fonte
Você precisará executar o código a seguir depois que sua intenção for acionada para remover a notificação.
NB: notificationId é o mesmo ID passado para executar sua notificação
fonte
builder.setAutoCancel (true);
Testado no Android 9 também.
fonte