java - notification - notificaciones push android firebase
Icono de notificación de color de Android (5)
Al crear la notificación, puede establecer el color y el icono. Si su icono es una imagen en blanco puro , aplicará el color en los lugares correctos.
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
val manager = context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
val notificationId = 10 // Some unique id.
// Creating a channel - required for O''s notifications.
val channel = NotificationChannel("my_channel_01",
"Channel human readable title",
NotificationManager.IMPORTANCE_DEFAULT)
manager.createNotificationChannel(channel)
// Building the notification.
val builder = Notification.Builder(context, channel.id)
builder.setContentTitle("Warning!")
builder.setContentText("This is a bad notification!")
builder.setSmallIcon(R.drawable.skull)
builder.setColor(ContextCompat.getColor(context, R.color.colorPrimary))
builder.setChannelId(channel.id)
// Posting the notification.
manager.notify(notificationId, builder.build())
}
Estoy trabajando en una aplicación donde creo una notificación para el usuario. Quiero que el icono aparezca en blanco cuando está en la barra de estado, pero en color azul cuando se muestra en el menú de notificación desplegable. Aquí hay un ejemplo de lo mismo que está haciendo la aplicación Google Store.
Notificación en blanco en la barra de estado:
Notificación a color en el menú desplegable:
¿Cómo puedo replicar esto? ¿Qué propiedades tengo que configurar?
Edición: Aquí está mi código actual: hice la imagen completamente blanca con un fondo transparente, por lo que se ve bien en la barra de estado, pero en la caída de la notificación, la imagen sigue siendo del mismo color blanco:
private NotificationCompat.Builder getNotificationBuilder() {
return new NotificationCompat.Builder(mainActivity)
.setDeleteIntent(deletedPendingIntent)
.setContentIntent(startChatPendingIntent)
.setAutoCancel(true)
.setSmallIcon(R.drawable.skylight_notification)
.setColor(ContextCompat.getColor(mainActivity, R.color.colorPrimary))
.setContentTitle(mainActivity.getString(R.string.notification_title))
.setContentText(mainActivity.getString(R.string.notification_prompt));
}
Encontré la respuesta a mi pregunta aquí: https://.com/a/44950197/4394594
No sé exactamente cuál era el problema, pero al colocar el enorme png que estaba usando para el icono en esta herramienta https://romannurik.github.io/AndroidAssetStudio/icons-notification.html#source.type=image&source.space.trim=1&source.space.pad=0&name=ic_skylight_notification y al colocar los iconos generados en mi carpeta mipmap, pude hacer que la setColor(...)
funcionara correctamente.
Esto es lo que hice para mi aplicación ...
private void showNotification(Context context) {
Log.d(MainActivity.APP_TAG, "Displaying Notification");
Intent activityIntent = new Intent(context, MainActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, activityIntent, PendingIntent.FLAG_UPDATE_CURRENT);
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(context);
mBuilder.setSmallIcon(R.drawable.ic_notification);
mBuilder.setColor(Color.GREEN);
mBuilder.setContentIntent(pendingIntent);
mBuilder.setContentTitle("EarthQuakeAlert");
mBuilder.setContentText("It''s been a while you have checked out earthquake data!");
mBuilder.setDefaults(Notification.DEFAULT_SOUND);
mBuilder.setAutoCancel(true);
NotificationManager mNotificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
mNotificationManager.notify(1, mBuilder.build());
}
Muestra Con Color:
Para las bases de datos de firebase enviadas desde la consola, solo necesita agregar esto en su manifiesto:
<meta-data
android:name="com.google.firebase.messaging.default_notification_icon"
android:resource="@drawable/white_logo" />
<meta-data
android:name="com.google.firebase.messaging.default_notification_color"
android:resource="@color/custom_color" />
Donde white_logo es su aplicación logo blanco, y custom_color es el color que desea que tenga el icono y el texto en color.
Más detalles aquí: https://firebase.google.com/docs/cloud-messaging/android/client
Puede usar DrawableCompat.setTint(int drawable);
del dibujable antes de ajustar el dibujable. Y mutate()
el dibujable, de lo contrario el tinte de color se aplicará a cada instancia de ese dibujable