Meu aplicativo gera uma notificação, mas o ícone definido por ela não está sendo exibido. Em vez disso, recebo um quadrado branco.
Tentei redimensionar o png do ícone (dimensões 720x720, 66x66, 44x44, 22x22). Curiosamente, ao usar dimensões menores, o quadrado branco é menor.
Pesquisei esse problema no Google, bem como a maneira correta de gerar notificações e, pelo que li, meu código deve estar correto. Infelizmente as coisas não são como deveriam ser.
Meu telefone é um Nexus 5 com Android 5.1.1. O problema também está presente nos emuladores, um Samsung Galaxy s4 com Android 5.0.1 e um Motorola Moto G com Android 5.0.1 (ambos os quais eu emprestei e não tenho no momento)
Segue o código para notificações e duas capturas de tela. Se você precisar de mais informações, não hesite em pedir.
Obrigado a todos.
@SuppressLint("NewApi") private void sendNotification(String msg, String title, String link, Bundle bundle) {
NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
Intent resultIntent = new Intent(getApplicationContext(), MainActivity.class);
resultIntent.putExtras(bundle);
PendingIntent contentIntent = PendingIntent.getActivity(this, 0,
resultIntent, Intent.FLAG_ACTIVITY_NEW_TASK);
Notification notification;
Uri sound = Uri.parse("android.resource://" + getPackageName() + "/" + R.raw.notificationsound);
notification = new Notification.Builder(this)
.setSmallIcon(R.drawable.lg_logo)
.setContentTitle(title)
.setStyle(new Notification.BigTextStyle().bigText(msg))
.setAutoCancel(true)
.setContentText(msg)
.setContentIntent(contentIntent)
.setSound(sound)
.build();
notificationManager.notify(0, notification);
}
fonte
Respostas:
Causa: Para o Lollipop 5.0, "Os ícones de notificação devem ser totalmente brancos".
Solução para o alvo Sdk 21
Se você deseja dar suporte aos ícones de materiais do Lollipop, crie ícones transparentes para o Lollipop e a versão acima. Consulte o seguinte: https://design.google.com/icons/
Veja http://developer.android.com/design/style/iconography.html e veremos que o estilo branco é como as notificações devem ser exibidas no Android Lollipop.
No Lollipop, o Google também sugere que usemos uma cor que será exibida atrás do ícone de notificação em branco. Consulte o link: https://developer.android.com/about/versions/android-5.0-changes.html
Onde queremos adicionar o cores https://developer.android.com/reference/android/support/v4/app/NotificationCompat.Builder.html#setColor(int)
A implementação do Notification Builder para a versão inferior e superior do sistema operacional Lollipop seria:
Nota: setColor está disponível apenas no Lollipop e afeta apenas o plano de fundo do ícone.
Resolverá seu problema completamente !!
fonte
Se você estiver usando o Google Cloud Messaging, esse problema não será resolvido simplesmente mudando seu ícone. Por exemplo, isso não funcionará:
Mesmo se ic_notification for transparente e branco. Também deve ser definido nos metadados do Manifest, da seguinte forma:
Os metadados estão sob a
application
tag, para referência.fonte
res/drawable/ic_notification.png
de tamanho 196x196?Meta-data
sugestão de tags.Eu realmente sugiro seguir as Diretrizes de design do Google :
que diz "Os ícones de notificação devem ser totalmente brancos".
fonte
Declare este código no Android Manifest:
Espero que seja útil para você.
fonte
ic_stat_name
? É um png? são muitos? por favor ajude!(Android Studio 3.5) Se você é uma versão recente do Android Studio, pode gerar suas imagens de notificação. Clique com o botão direito na pasta res > Novo> Ativo da imagem . Você verá Configurar ativos de imagem, como mostra a imagem abaixo. Altere o tipo de ícone para ícones de notificação . Suas imagens devem ser brancas e transparentes. Este recurso Configurar imagem aplicará essa regra. Importante: Se você deseja que os ícones sejam usados para notificações na nuvem / push, adicione os metadados sob a tag do aplicativo para usar os ícones de notificação recém-criados.
fonte
Podemos fazer como abaixo:
Crie um novo objeto do construtor de notificações e chame
setSmallIcon()
usando o objeto do construtor de notificações, como no código abaixo.Crie um método no qual verificaremos em qual versão do sistema operacional estamos instalando nosso aplicativo. Se estiver abaixo do Lolipop, ou seja, API 21, o ícone normal do aplicativo será usado com a cor de fundo, caso contrário, o ícone transparente do aplicativo será sem fundo. Portanto, os dispositivos que usam a versão do sistema operacional> = 21 definirão a cor de plano de fundo do ícone usando o método
setColor()
da classe do construtor Notification.Código de amostra:
fonte
setColor
no Kitkat (API 19) e IceCreamSandwich (API 15), em ambos os casos, ignorou a cor, mas não travou . Então, posso omitir com segurança a verificação da versão do sistema operacional?Tente isto
eu estava enfrentando o mesmo problema, tentei muitas respostas, mas não obtive nenhuma solução, finalmente encontrei o caminho para resolver o meu problema.
- faça o ícone de notificação com fundo transparente. A largura e a altura do aplicativo devem ser como os tamanhos abaixo e cole tudo isso em seu projeto-> app-> src-> main-> res
MDPI 24 * 24
HDPI 36 * 36
XHDPI 48 * 48
XXHDPI 72 * 72
após o acima, cole esta linha abaixo no seu método onMessageReceived
Não se esqueça de adicionar este código no arquivo de manifesto
fonte
adicione esta linha no arquivo manifest.xml no bloco de aplicativos
fonte
Se você deseja fornecer o ícone de notificação de suporte de pirulito, faça dois ícones de notificação de tipo:
Agora defina o ícone apropriado para o construtor de notificações no tempo de execução, na versão do sistema operacional:
fonte
Finalmente, tenho a solução para esse problema.
Esse problema ocorre apenas quando o aplicativo não está em execução. (nem em segundo plano nem em primeiro plano) . Quando o aplicativo é executado em primeiro plano ou em segundo plano, o ícone de notificação é exibido corretamente . (Não o quadrado branco)
Portanto, o que devemos definir é a mesma configuração para o ícone de notificação nas APIs de back-end e a do Frontend.
No frontend, usamos o React Native e, para notificação por push, usamos o pacote react-native-fcm npm .
Usamos o pacote fcm-push npm usando o Node.js como back-end para notificação por push e configuramos a estrutura de carga útil da seguinte maneira.
O que ele basicamente procura pela imagem notification_icon armazenada localmente em nosso sistema Android.
fonte
As notificações são escala de cinza, conforme explicado abaixo. Eles não são em preto e branco, apesar do que outros escreveram. Você provavelmente já viu ícones com vários tons, como barras de força da rede.
Antes da API 21 (Lollipop 5.0), os ícones de cores funcionavam. Você pode forçar seu aplicativo a segmentar a API 20, mas isso limita os recursos disponíveis para ele, portanto, não é recomendado. Você pode testar o nível da API em execução e definir um ícone de cor ou em escala de cinza adequadamente, mas isso provavelmente não vale a pena. Na maioria dos casos, é melhor usar um ícone em escala de cinza.
As imagens têm quatro canais, RGBA (vermelho / verde / azul / alfa). Para ícones de notificação, o Android ignora os canais R, G e B. O único canal que conta é o Alpha, também conhecido como opacidade. Crie seu ícone com um editor que lhe dê controle sobre o valor Alfa de suas cores de desenho.
Como os valores Alpha geram uma imagem em escala de cinza:
Alterando-o com
setColor
:Ligue
NotificationCompat.Builder.setColor(int argb)
. A partir da documentação paraNotification.color
:Meus testes com setColor mostram que os componentes Alpha não são ignorados. Valores alfa mais altos tornam um pixel branco. Os valores alfa mais baixos transformam um pixel na cor de plano de fundo (preto no meu dispositivo) na área de notificação ou na cor especificada na notificação suspensa.
fonte
Resolvi o problema adicionando o código abaixo para manifestar,
onde
ic_stat_name
criado no Android Studio Clique com o botão direito do mouse em res >> Novo >> Recursos de imagem >> IconType (Notification)E mais uma etapa que tenho que fazer no lado do servidor php com a carga útil da notificação
Observe a seção
onde está o nome do ícone
"icon" => "ic_stat_name"
deve ser o mesmo conjunto no manifesto.fonte
Requisitos para corrigir este problema:
Formato da imagem: PNG de 32 bits (com alfa)
A imagem deve ser transparente
Índice de cores da transparência: branco (FFFFFF)
Fonte: http://gr1350.blogspot.com/2017/01/problem-with-setsmallicon.html
fonte
Encontrei um link onde podemos gerar nosso próprio ícone branco,
Abra este link e faça o upload do seu ic_launcher ou ícone de notificação
fonte
Você pode usar um ícone diferente para diferentes versões. Basta definir a lógica no seu ícone assim:
fonte
Para SDK> = 23, adicione setLargeIcon
fonte
Para reduzir versões específicas do SDK, você pode simplesmente fazer o seguinte: (substitua '#' por '0x')
fonte
0xFF169AB9
, você está perdendo o canal alfa totalmente opaco.Quando você quiser manter o ícone colorido - Solução alternativa
Adicione pixel com cores ligeiramente diferentes ao ícone.
No meu caso, um ícone preto com sombras e luz. Quando adicionado pixel azul escuro, ele funciona.
fonte
Tenho um problema semelhante no Android 8.0. Tente usar o recurso de ícone BRANCO. Eu tenho um quadrado branco quando estou tentando usar uma imagem colorida para o ícone; quando eu o substituo pelo ícone branco, ele começa a funcionar.
fonte