
Traduje para usted
un artículo de Brandon Weaver sobre cómo trabajar con notificaciones en el sistema operativo Android. El programador explica cómo agregar rápidamente esta funcionalidad a su aplicación. El artículo, en primer lugar, será útil para los desarrolladores principiantes de Android.
Las notificaciones son una de las formas más fáciles y rápidas de hacer que su aplicación sea más interactiva, lo que atraerá a más usuarios. Las notificaciones proporcionan al usuario información breve sobre lo que pueden necesitar en este momento. También es una forma de informar sobre los próximos eventos. Intentemos agregar rápidamente esta función a la aplicación.
Skillbox recomienda: El curso en línea aplicado de Python Data Analyst .
Le recordamos: para todos los lectores de "Habr": un descuento de 10.000 rublos al registrarse en cualquier curso de Skillbox con el código de promoción "Habr".
Crear notificación
El primer paso es crear un objeto de "Notificación". Para hacer esto, use NotificationCompat.Builder. El contenido mínimo de notificación permitido por los desarrolladores de Android es un pequeño icono. Esto es bueno, pero no muy útil para el usuario. A continuación se muestra un diagrama de una notificación estándar que es bien recibida.

Un icono pequeño se mostrará constantemente, y es importante que sea alfa-transparente. Sin esto, en lugar de un icono, obtienes un cuadro blanco.
El título de la notificación también es importante. Esta debería ser una breve descripción para comprender por qué el usuario generalmente está preocupado.
El cuerpo de la notificación contiene un texto largo con toda la información necesaria.
Un ícono grande puede ser el logotipo de una empresa u otra cosa.
A continuación hay dos opciones para el usuario.
Para mostrar todo esto, necesita un código corto:
.setSmallIcon(R.drawable.ic_announcement) .setContentTitle(title) .setContentText(body) .build()
Mostrar notificación
Hemos creado nuestra notificación, ahora la tarea es mostrarla. Android hace posible hacer esto usando NotificationManagerCompat. Para enviar una notificación, debe utilizar la Id. De notificación y la notificación misma.
with(NotificationManagerCompat.from(context)) { if (getNotificationChannel(CHANNEL_ID) == null) { createNotificationChannel(context) } notify(notificationId, builder.build()) }
Se necesita un código adicional para verificar la existencia del canal de notificación.
Canales e importancia
Por primera vez, un usuario tuvo la oportunidad de elegir los tipos de notificaciones de sus aplicaciones en Oreo. Es importante crear varios canales, porque si todo va en un canal, el usuario no podrá seleccionar los tipos de notificaciones que necesita y bloqueará todo.
teNotificationChannel(context: Context) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { val name = context.getString(R.string.channel_name) val descriptionText = context.getString(R.string.channel_description) val importance = NotificationManager.IMPORTANCE_HIGH val channel = NotificationChannel(CHANNEL_ID, name, importance).apply { description = descriptionText } NotificationManagerCompat.from(context).createNotificationChannel(channel) } }
El canal debe incluir la siguiente información:
- ID: identificador de canal;
- nombre: debe ser breve, por ejemplo, "Mensajes";
- importancia: puede ser alta, predeterminada, baja o mínima;
- descripción: se mostrará en la configuración de Android. El desarrollador debe cuidar la calidad de la descripción.
Interacción del usuario
Hay varias formas en que un usuario puede interactuar con las notificaciones. Afortunadamente, las API que le permiten controlar el proceso son bastante similares. Intentos y pendientes Los intentos se utilizan para proporcionar comentarios a la aplicación, proporcionando una lógica de procesamiento específica.
La forma más fácil de manejar una gran cantidad de notificaciones es usar BroadcastReceiver. Cuando el usuario comienza a interactuar con la notificación, se activará la intención y se llamará al método onReceive BroadcastReceiver.
val builder = NotificationCompat.Builder(context, CHANNEL_ID) ... .setContentIntent(onContentTapped ) .setDeleteIntent(onSwipedAway ) .addAction( R.drawable.ic_announcement, actionTitle, onActionTapped )
ContentIntent se iniciará haciendo clic en la notificación. Vale la pena recordar que la notificación no será rechazada si no llama a setAutoCancel (true) en ella.
DeleteIntent comenzará después de que el usuario elimine la notificación.
Las acciones son los botones en la parte inferior de la notificación. También tienen insignias y nombres.
Para crear un BroadcastReceiver, debe extender la clase BroadcastReceiver, anular el método onReceive y recordar declarar el Receiver en AndroidManifest.xml.
class NotificationBroadcastReceiver : BroadcastReceiver() { override fun onReceive(context: Context, intent: Intent) { val action = intent.action when (action) { ACTION_ONE -> { Toast.makeText(context, "Action One hit!", Toast.LENGTH_SHORT).show() } ACTION_TWO -> { Toast.makeText(context, "Action Two hit!", Toast.LENGTH_SHORT).show() } } } } object NotificationController { fun pendingIntent(context: Context, name: String, extras: Bundle?): PendingIntent { val intent = Intent(context, NotificationBroadcastReceiver::class.java).apply { action = name putExtra(EXTRA_NOTIFICATION_ID, extras) } return PendingIntent.getBroadcast(context, 0, intent, 0) } }
NotificationController es una herramienta rápida para crear PendingIntents para notificaciones. Lo más importante es dar a las acciones diferentes nombres para manejar correctamente las reacciones del usuario a la notificación. Además, si tiene la intención de iniciar una Actividad desde BroadcastReceiver, debe usar IntentFlag NEW_TASK.
Esto es necesario para procesar todas las notificaciones en un solo lugar. Los intentos también se pueden registrar para diferentes BroadcastReceivers, por lo que puede limitar el alcance a un BroadcastReceiver para cada tipo de notificación.
Todo esto es solo el comienzo del trabajo. Hay muchos ejemplos excelentes en la documentación, así que asegúrese de estudiarla si tiene preguntas o si desea hacer algo más avanzado.
Skillbox recomienda: