Preciso de um programa que adicionará uma notificação no Android. E quando alguém clica na notificação, deve levá-lo à minha segunda atividade.
Eu estabeleci o código. A notificação deveria estar funcionando, mas por algum motivo não está funcionando. O Notification
não está aparecendo. Eu não sei o que estou perdendo.
Código desses arquivos:
Notification n = new Notification.Builder(this)
.setContentTitle("New mail from " + "[email protected]")
.setContentText("Subject")
.setContentIntent(pIntent).setAutoCancel(true)
.setStyle(new Notification.BigTextStyle().bigText(longText))
.build();
NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
// Hide the notification after it's selected
notificationManager.notify(0, n);
android
notifications
Choudhury AM
fonte
fonte
Activity
não está sendo lançado? NãoNotification
está aparecendo?Respostas:
O código não funciona sem um ícone. Portanto, adicione a
setSmallIcon
chamada à cadeia de construtores assim para que funcione:Android Oreo (8.0) e superior
O Android 8 introduziu um novo requisito de configuração da
channelId
propriedade usando aNotificationChannel
.fonte
setChannelId
são obrigatórios. Antes de adicionar isso, a notificação é exibida no meu dispositivo SONY, mas não no dispositivo SAMSUNG.Android.OS.BuildVersionCodes.O
é igual a 26?if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O){ mBuilder.setChannelId(channelId); }
pois sem ela, a notificação não aparecerá, mesmo se a API do seu dispositivo> = 26.Na verdade, a resposta de ƒernando Valle não parece estar correta. Então, novamente, sua pergunta é muito vaga porque você não mencionou o que está errado ou não está funcionando.
Olhando para o seu código, estou assumindo que ele
Notification
simplesmente não está aparecendo.Sua notificação não está sendo exibida porque você não forneceu um ícone. Mesmo que a documentação do SDK não mencione que ele é obrigatório, na verdade é muito e você
Notification
não aparecerá sem ele.addAction
só está disponível a partir de 4.1. Antes disso, você usaria oPendingIntent
para iniciar umActivity
. Você parece especificar aPendingIntent
, então seu problema está em outro lugar. Logicamente, deve-se concluir que é o ícone que falta.fonte
Notification.Builder
, nãoNotificationCompat.Builder
, como você está sugerindo. Só porque existe uma biblioteca de compatibilidade e ela pode ser usada, não significa que a função esteja disponível na API normal. O link que você fornece realmente estipula isso. Esta questão está claramente relacionadaNotification.Builder
, como mostra o exemplo. E a biblioteca de compatibilidade provavelmente só incluiu esta função após a versão 4.1 estar disponível. Sua resposta é enganosa, porque agora você sugere que ela está disponível desde 2.3.Estava faltando o pequeno ícone. Eu cometi o mesmo erro e a etapa acima resolveu.
De acordo com a documentação oficial: Um objeto de Notificação deve conter o seguinte:
Um pequeno ícone, definido por setSmallIcon ()
Um título, definido por setContentTitle ()
Texto detalhado, definido por setContentText ()
No Android 8.0 (API de nível 26) e superior , um ID de canal de notificação válido, definido por setChannelId () ou fornecido no construtor NotificationCompat.Builder ao criar um canal.
Consulte http://developer.android.com/guide/topics/ui/notifiers/notifications.html
fonte
Isso me enganou hoje, mas percebi que era porque no Android 9.0 (Pie), o Do Not Disturb por padrão também oculta todas as notificações, em vez de apenas silenciá-las como no Android 8.1 (Oreo) e antes. Isso não se aplica a notificações.
Eu gosto de ter DND ativado para meu dispositivo de desenvolvimento, então ir para as configurações DND e alterar a configuração para simplesmente silenciar as notificações (mas não ocultá-las) corrigiu para mim.
fonte
A criação de canais de notificação é obrigatória para versões do Android posteriores ao Android 8.1 (Oreo) para tornar as notificações visíveis. Se as notificações não estiverem visíveis em seu aplicativo para Androids Oreo +, você precisará chamar a seguinte função quando seu aplicativo for iniciado -
fonte
Eu acho que você esquece o
Veja aqui: Adicionar Ação
fonte
addAction()
não está disponível emNotification.Builder
.Action
instância com a qual pode criarNotification.Action.Builder
. PS, Sempre use a alternativa Compat (ou seja, NotificationCompat), uma vez que o Google tende a corrigir bugs e fornecer melhor compatibilidade com eles.setContentIntent(null)
com o construtor.Eu tive o mesmo problema com meu aplicativo Android. Eu estava testando as notificações e descobri que elas estavam aparecendo no meu emulador de Android, que rodava um sistema Android 7.0 (Nougat), enquanto não estava rodando no meu telefone, que tinha Android 8.1 (Oreo).
Depois de ler a documentação, descobri que o Android tinha um recurso chamado canal de notificação, sem o qual as notificações não apareceriam nos dispositivos Oreo. Abaixo está o link para a documentação oficial do Android nos canais de notificação.
fonte
Para mim, era um problema com
deviceToken
. Verifique se o token do dispositivo receptor e remetente está devidamente atualizado em seu banco de dados ou onde quer que você o esteja acessando para enviar notificações.Por exemplo, use o seguinte para atualizar o token do dispositivo na inicialização do aplicativo. Portanto, ele será sempre atualizado corretamente.
fonte
deviceToken
declarado?onSuccess
vazio?onSuccess
s - eu estava me referindo ao interno (que está vazio))Você também precisa alterar o arquivo build.gradle e adicionar a versão do Android SDK usada nele:
Isso funcionou como um encanto no meu caso.
fonte
As notificações podem não ser mostradas se você mostrar as notificações rapidamente uma após a outra ou cancelar uma existente e, em seguida, mostrá-la novamente (por exemplo, para acionar uma notificação de alerta para notificar o usuário sobre uma alteração em uma notificação em andamento). Nesses casos, o sistema pode decidir apenas bloquear a notificação quando achar que ela pode se tornar muito opressiva / com spam para o usuário.
Observe que, pelo menos no Android padrão (testado com 10) de fora, esse comportamento parece um pouco aleatório: às vezes acontece e às vezes não. Meu palpite é que há um limite de tempo muito curto durante o qual você não tem permissão para enviar muitas notificações. Às vezes, chamar
NotificationManager.cancel()
e entãoNotificationManager.notify()
pode causar esse comportamento.Se você tiver a opção, ao atualizar uma notificação, não a cancele antes, apenas ligue
NotificationManager.notify()
com a notificação atualizada. Isso não parece desencadear o bloqueio acima mencionado pelo sistema.fonte
Se você estiver na versão> = Android 8.1 (Oreo) enquanto usa um canal de notificação, defina sua importância como alta:
fonte