La notificación es un tipo de mensaje, alerta o estado de una aplicación (probablemente ejecutándose en segundo plano) que está visible o disponible en los elementos de la interfaz de usuario de Android. Esta aplicación podría estar ejecutándose en segundo plano, pero el usuario no la está utilizando. El propósito de una notificación es notificar al usuario sobre un proceso que se inició en la aplicación por parte del usuario o del sistema. Este artículo podría ayudar a alguien que se esfuerza por crear una notificación con fines de desarrollo.
Las notificaciones pueden tener varios formatos y diseños según el desarrollador. En general, uno debe haber presenciado estos cuatro tipos de notificaciones:
- Notificación de la barra de estado (aparece en el mismo diseño que la hora actual, porcentaje de batería)
- Cajón de notificaciones Notificación (aparece en el menú desplegable)
- Notificación de aviso (aparece en la pantalla superpuesta, por ejemplo: notificación de Whatsapp, mensajes OTP)
- Notificación de pantalla de bloqueo (supongo que lo sabes)
En este artículo, discutiremos cómo producir notificaciones en Kotlin .
Implementación paso a paso
Paso 1: crear un nuevo proyecto
Para crear un nuevo proyecto en Android Studio, consulte Cómo crear/iniciar un nuevo proyecto en Android Studio . Tenga en cuenta que seleccione Kotlin como lenguaje de programación.
Paso 2: trabajar con el archivo activity_main.xml
Vaya al archivo activity_main.xml y consulte el siguiente código. En este paso, vamos a diseñar nuestra página de diseño. Aquí, usaremos RelativeLayout para obtener la Vista de desplazamiento del archivo Kotlin. A continuación se muestra el código para el archivo activity_main.xml .
XML
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <Button android:id="@+id/btn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:text="Send Notification" /> </RelativeLayout>
Paso 3: Crear una nueva actividad vacía
Artículo de referencia: ¿Cómo crear métodos Constructor, Getter/Setter y nueva actividad en Android Studio usando accesos directos?
Nombra la actividad como afterNotification . Cuando alguien hace clic en la notificación, esta actividad se abrirá en nuestra aplicación, es decir, el usuario será redirigido a esta página. A continuación se muestra el código para el archivo activity_after_notification.xml .
XML
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".afterNotification"> <TextView android:id="@+id/textView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:text="Welcome To GeeksforGeeks" android:textSize="15sp" android:textStyle="bold" /> </RelativeLayout>
Nota 1 :Sin configurar los canales de notificación, no puede generar notificaciones para aplicaciones con API de Android >=26. Para ellos es obligatorio generar un canal de notificaciones. Las aplicaciones con API <26 no necesitan canales de notificación, solo necesitan un generador de notificaciones. Se supone que cada canal tiene un comportamiento particular que será aplicable a todas las notificaciones que forman parte de él. Por lo tanto, cada canal tendrá una ID de canal que básicamente actuará como un identificador único para este canal, lo que será útil si el usuario desea diferenciar un canal de notificación en particular. Por el contrario, el generador de notificaciones proporciona una forma conveniente de configurar los diversos campos de una notificación y generar vistas de contenido utilizando la plantilla de diseño de notificación de la plataforma, pero no puede dirigirse a un canal de notificación en particular.
Nota 2: si ha consultado cualquier otra documentación o cualquier otro blog antes de este, es posible que los haya notado apelando a implementar la siguiente dependencia «com.android.support:support-compat:28.0.0» . Lo que he experimentado personalmente es que no hay necesidad de implementarlo, las cosas van muy bien sin esto también.
Paso 5: trabajar con el archivo MainActivity.kt
Vaya al archivo MainActivity.kt y consulte el siguiente código. A continuación se muestra el código del archivo MainActivity.kt . Se agregan comentarios dentro del código para comprender el código con más detalle.
Kotlin
import android.app.Notification import android.app.NotificationChannel import android.app.NotificationManager import android.app.PendingIntent import android.content.Context import android.content.Intent import android.graphics.BitmapFactory import android.graphics.Color import android.os.Build import android.os.Bundle import android.widget.Button import android.widget.RemoteViews import androidx.appcompat.app.AppCompatActivity class MainActivity : AppCompatActivity() { // declaring variables lateinit var notificationManager: NotificationManager lateinit var notificationChannel: NotificationChannel lateinit var builder: Notification.Builder private val channelId = "i.apps.notifications" private val description = "Test notification" override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) // accessing button val btn = findViewById<Button>(R.id.btn) // it is a class to notify the user of events that happen. // This is how you tell the user that something has happened in the // background. notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager // onClick listener for the button btn.setOnClickListener { // pendingIntent is an intent for future use i.e after // the notification is clicked, this intent will come into action val intent = Intent(this, afterNotification::class.java) // FLAG_UPDATE_CURRENT specifies that if a previous // PendingIntent already exists, then the current one // will update it with the latest intent // 0 is the request code, using it later with the // same method again will get back the same pending // intent for future reference // intent passed here is to our afterNotification class val pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT) // RemoteViews are used to use the content of // some different layout apart from the current activity layout val contentView = RemoteViews(packageName, R.layout.activity_after_notification) // checking if android version is greater than oreo(API 26) or not if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { notificationChannel = NotificationChannel(channelId, description, NotificationManager.IMPORTANCE_HIGH) notificationChannel.enableLights(true) notificationChannel.lightColor = Color.GREEN notificationChannel.enableVibration(false) notificationManager.createNotificationChannel(notificationChannel) builder = Notification.Builder(this, channelId) .setContent(contentView) .setSmallIcon(R.drawable.ic_launcher_background) .setLargeIcon(BitmapFactory.decodeResource(this.resources, R.drawable.ic_launcher_background)) .setContentIntent(pendingIntent) } else { builder = Notification.Builder(this) .setContent(contentView) .setSmallIcon(R.drawable.ic_launcher_background) .setLargeIcon(BitmapFactory.decodeResource(this.resources, R.drawable.ic_launcher_background)) .setContentIntent(pendingIntent) } notificationManager.notify(1234, builder.build()) } } }
Con esto, ahora hemos creado con éxito una «Notificación» para nuestra aplicación. Tenga en cuenta que los parámetros enumerados en el código anterior son obligatorios y que la ausencia de un solo parámetro podría provocar el bloqueo o el inicio de la aplicación. El título del contenido, el texto del contenido y el icono pequeño son parámetros personalizables, pero también son obligatorios. Uno puede cambiar sus valores según el requisito.