Mi aplicación genera una notificación, pero el icono que configuré para esa notificación no se muestra. En cambio, obtengo un cuadrado blanco.
He intentado cambiar el tamaño del png del icono (dimensiones 720x720, 66x66, 44x44, 22x22). Curiosamente, cuando se usan dimensiones más pequeñas, el cuadrado blanco es más pequeño.
He buscado en Google este problema, así como la forma correcta de generar notificaciones, y por lo que he leído, mi código debe ser correcto. Lamentablemente, las cosas no son como deberían ser.
Mi teléfono es un Nexus 5 con Android 5.1.1. El problema también está presente en los emuladores, un Samsung Galaxy s4 con Android 5.0.1 y un Motorola Moto G con Android 5.0.1 (los cuales tomé prestados y no tengo ahora)
Sigue el código para las notificaciones y dos capturas de pantalla. Si necesita más información, no dude en solicitarla.
Gracias 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);
}
fuente
Respuestas:
Causa: para 5.0 Lollipop "Los iconos de notificación deben ser completamente blancos".
Solución para el objetivo Sdk 21
Si desea admitir iconos de material de Lollipop, haga iconos transparentes para Lollipop y la versión anterior. Consulte lo siguiente: https://design.google.com/icons/
Mire http://developer.android.com/design/style/iconography.html , y veremos que el estilo blanco es cómo se deben mostrar las notificaciones en Android Lollipop.
En Lollipop, Google también sugiere que usemos un color que se mostrará detrás del ícono de notificación blanco. Enlace de referencia: https://developer.android.com/about/versions/android-5.0-changes.html
Donde queramos agregar colores https://developer.android.com/reference/android/support/v4/app/NotificationCompat.Builder.html#setColor(int)
La implementación de Notification Builder para la versión de Lollipop OS anterior y posterior sería:
Nota: setColor solo está disponible en Lollipop y solo afecta al fondo del icono.
¡Resolverá su problema por completo!
fuente
Si está utilizando Google Cloud Messaging, este problema no se resolverá simplemente cambiando su icono. Por ejemplo, esto no funcionará:
Incluso si ic_notification es transparente y blanco. También debe definirse en los metadatos Manifiesto, así:
Los metadatos van debajo de la
application
etiqueta, como referencia.fuente
res/drawable/ic_notification.png
de tamaño 196x196?Meta-data
sugerencia de etiqueta.Realmente sugiero seguir las pautas de diseño de Google :
que dice "Los iconos de notificación deben ser completamente blancos".
fuente
Declare este código en el Manifiesto de Android:
Espero que esto te sea útil.
fuente
ic_stat_name
? ¿Es un png? ¿son muchos? ¡por favor ayuda!(Android Studio 3.5) Si es una versión reciente de Android Studio, puede generar sus imágenes de notificación. Haga clic derecho en su carpeta res > Nuevo> Activo de imagen . Luego verá Configurar activos de imagen como se muestra en la imagen a continuación. Cambiar el tipo de icono a iconos de notificación . Sus imágenes deben ser blancas y transparentes. Esta configuración de activos de imagen hará cumplir esa regla. Importante: si desea que los íconos se usen para notificaciones en la nube / push, debe agregar los metadatos debajo de la etiqueta de su aplicación para usar los íconos de notificación recién creados.
fuente
Podemos hacer lo siguiente:
Cree un nuevo objeto de generador de notificaciones y llame
setSmallIcon()
usando el objeto generador de notificaciones como en el código a continuación.Cree un método en el que verifiquemos en qué versión del sistema operativo estamos instalando nuestra aplicación. Si está debajo de Lolipop, es decir, API 21, tomará el ícono normal de la aplicación con el color de fondo; de lo contrario, tomará el ícono transparente de la aplicación sin ningún fondo. Por lo tanto, los dispositivos que usan la versión del sistema operativo> = 21 establecerán el color de fondo del icono usando el método
setColor()
de la clase de generador de notificaciones.Código de muestra:
fuente
setColor
en Kitkat (API 19) y IceCreamSandwich (API 15), en ambos casos ignoró el color pero no se bloqueó . Entonces, ¿puedo omitir con seguridad la comprobación de la versión del sistema operativo?Prueba esto
Estaba enfrentando el mismo problema que probé muchas respuestas pero no obtuve ninguna solución, finalmente encontré la manera de resolver mi problema.
- Haga un icono de notificación con fondo transparente. El ancho y la altura de la aplicación deben ser como los tamaños inferiores y pegue todo esto en su proyecto-> aplicación-> src-> main-> res
MDPI 24 * 24
HDPI 36 * 36
XHDPI 48 * 48
XXHDPI 72 * 72
después de lo anterior, pegue esta línea a continuación en su método onMessageReceived
No olvides agregar este código en el archivo de manifiesto
fuente
agregue esta línea en el archivo manifest.xml en el bloque de aplicación
fuente
Si desea proporcionar el icono de notificación de soporte de lollipop, haga dos tipos de icono de notificación:
Ahora configure el icono apropiado para el generador de notificaciones en la base de tiempo de ejecución en la versión del sistema operativo:
fuente
Finalmente tengo la solución para este problema.
Este problema ocurre solo cuando la aplicación no se está ejecutando. (ni en el fondo ni en primer plano) . Cuando la aplicación se ejecuta en primer plano o en segundo plano, el icono de notificación se muestra correctamente (no el cuadrado blanco)
Entonces, lo que debemos establecer es la misma configuración para el icono de notificación en las API de backend que la de Frontend.
En la interfaz hemos usado React Native y para notificaciones push hemos usado el paquete react-native-fcm npm .
Hemos usado el paquete fcm-push npm usando Node.js como back-end para notificaciones push y configuramos la estructura de carga de la siguiente manera.
Lo que básicamente busca es la imagen de sondeo_notificación almacenada localmente en nuestro sistema Android.
fuente
Las notificaciones son en escala de grises como se explica a continuación. No son en blanco y negro, a pesar de lo que otros han escrito. Probablemente haya visto iconos con varios tonos, como barras de fuerza de red.
Antes de API 21 (Lollipop 5.0), los iconos de color funcionan. Podría obligar a su aplicación a apuntar a la API 20, pero eso limita las características disponibles para su aplicación, por lo que no se recomienda. Puede probar el nivel de API en ejecución y establecer un icono de color o un icono de escala de grises de manera adecuada, pero probablemente no valga la pena. En la mayoría de los casos, es mejor ir con un ícono en escala de grises.
Las imágenes tienen cuatro canales, RGBA (rojo / verde / azul / alfa). Para los iconos de notificación, Android ignora los canales R, G y B. El único canal que cuenta es Alpha, también conocido como opacidad. Diseñe su icono con un editor que le brinde control sobre el valor Alfa de los colores de su dibujo.
Cómo los valores alfa generan una imagen en escala de grises:
Cambiándolo con
setColor
:Llamar
NotificationCompat.Builder.setColor(int argb)
. De la documentación paraNotification.color
:Mi prueba con setColor muestra que los componentes Alpha no se ignoran. Los valores alfa más altos convierten un píxel en blanco. Los valores alfa más bajos convierten un píxel al color de fondo (negro en mi dispositivo) en el área de notificación, o al color especificado en la notificación desplegable.
fuente
He resuelto el problema agregando el siguiente código para manifestar,
dónde
ic_stat_name
creó en Android Studio Haga clic derecho en res >> Nuevo >> Activos de imagen >> IconType (Notificación)Y un paso más que tengo que hacer en el lado del servidor php con la carga de notificación
Tenga en cuenta la sección
donde el nombre del icono
"icon" => "ic_stat_name"
debe ser el mismo conjunto en el manifiesto.fuente
Requisitos para solucionar este problema:
Formato de imagen: PNG de 32 bits (con alfa)
La imagen debe ser transparente.
Índice de color de transparencia: blanco (FFFFFF)
Fuente: http://gr1350.blogspot.com/2017/01/problem-with-setsmallicon.html
fuente
Encontré un enlace donde podemos generar nuestro propio icono blanco,
Abra este enlace y cargue su ic_launcher o icono de notificación
fuente
Puede usar diferentes íconos para diferentes versiones. Simplemente configure la lógica en su icono de esta manera:
fuente
Para SDK> = 23, agregue setLargeIcon
fuente
Para reducir las versiones específicas del SDK, simplemente puede hacer esto: (reemplace '#' a '0x')
fuente
0xFF169AB9
, te falta el canal alfa completamente opaco.Cuando desee mantener el ícono colorido: solución alternativa
Agregue píxeles con un color ligeramente diferente al ícono.
En mi caso, tengo un icono negro con sombras y luz. Cuando se agrega un píxel azul oscuro, funciona.
fuente
Tengo un problema similar en Android 8.0. Intenta utilizar el recurso de icono BLANCO. Tengo un cuadrado blanco cuando intento usar una imagen en color para el icono, cuando lo reemplazo al icono blanco, comienza a funcionar.
fuente