Las notificaciones en Android son uno de los canales de comunicación e interacción más potentes que tiene una aplicación con sus usuarios. Nos permiten enviar alertas visuales, avisos de tareas en segundo plano, mensajes de chat o recordatorios directos a la barra de estado y al panel de notificaciones del dispositivo.

POST_NOTIFICATIONS al usuario antes de disparar cualquier notificación.
Anatomía de una notificación en Android

Al desplegar el panel de notificaciones, el sistema muestra una estructura estandarizada compuesta por los siguientes elementos:
- Small Icon: Icono monocromático obligatorio que se muestra en la barra de estado superior.
- App Name: Nombre de la aplicación proporcionado por el sistema.
- Timestamp: Marca de tiempo que indica cuándo se disparó la alerta.
- Large Icon: Gráfico o avatar opcional situado a la derecha.
- Title (setContentTitle): Título principal en negrita de la notificación.
- Text (setContentText): Mensaje o descripción explicativa del evento.
Paso 1: Declarar y Solicitar el Permiso POST_NOTIFICATIONS (Android 13+)
En tu archivo AndroidManifest.xml, añade:
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>
...
</manifest>
Y en tu Activity, solicítalo con la moderna Activity Result API de AndroidX:
val requestPermissionLauncher = registerForActivityResult(
ActivityResultContracts.RequestPermission()
) { isGranted: Boolean ->
if (isGranted) {
// Permiso concedido: puedes lanzar notificaciones
} else {
// Permiso denegado por el usuario
}
}
// Comprobación de versión antes de solicitar
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
if (ContextCompat.checkSelfPermission(this, Manifest.permission.POST_NOTIFICATIONS)
!= PackageManager.PERMISSION_GRANTED) {
requestPermissionLauncher.launch(Manifest.permission.POST_NOTIFICATIONS)
}
}
Paso 2: Crear el Canal de Notificaciones (NotificationChannel)
Desde Android 8.0 (API 26), toda notificación debe pertenecer obligatoriamente a un NotificationChannel. Esto permite al usuario personalizar en los ajustes del teléfono qué tipo de avisos quiere recibir (sonido, vibración, silenciadas):
private val CHANNEL_ID = "canal_alertas_principales"
private fun createNotificationChannel() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
val name = "Alertas Principales"
val descriptionText = "Notificaciones de aviso y tareas del sistema"
val importance = NotificationManager.IMPORTANCE_HIGH
val channel = NotificationChannel(CHANNEL_ID, name, importance).apply {
description = descriptionText
enableVibration(true)
}
val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
notificationManager.createNotificationChannel(channel)
}
}
Paso 3: Construir y Lanzar la Notificación
Utilizamos NotificationCompat.Builder de la librería AndroidX para garantizar compatibilidad total con todas las versiones del sistema operativo:
fun showNotification(context: Context, titulo: String, mensaje: String) {
val intent = Intent(context, MainActivity::class.java).apply {
flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
}
val pendingIntent = PendingIntent.getActivity(
context, 0, intent,
PendingIntent.FLAG_IMMUTABLE or PendingIntent.FLAG_UPDATE_CURRENT
)
val builder = NotificationCompat.Builder(context, CHANNEL_ID)
.setSmallIcon(R.drawable.ic_notification)
.setContentTitle(titulo)
.setContentText(mensaje)
.setPriority(NotificationCompat.PRIORITY_HIGH)
.setContentIntent(pendingIntent)
.setAutoCancel(true)
with(NotificationManagerCompat.from(context)) {
if (ActivityCompat.checkSelfPermission(context, Manifest.permission.POST_NOTIFICATIONS)
== PackageManager.PERMISSION_GRANTED) {
notify(1001, builder.build())
}
}
}
Puedes inspeccionar el código fuente completo del proyecto de ejemplo en mi repositorio de GitHub: AlarmNotificationSample.
Notificaciones Push con Firebase Cloud Messaging (FCM)
Si deseas enviar notificaciones de forma remota a miles de dispositivos simultáneamente (por ejemplo, para alertar sobre nuevas ofertas, publicaciones o actualizaciones), el servicio por excelencia es Firebase Cloud Messaging (FCM). En este vídeo de YouTube de mi curso práctico te explico cómo configurarlo paso a paso: