Notificaciones de progreso de Android en Kotlin

En este tutorial, aprenderá cómo crear una notificación de progreso básica (indicador de progreso indeterminado e indicador de progreso de duración fija) para Android usando Kotlin.

Antes de comenzar, primero comprendamos los componentes de una notificación en Android.
\\*

\\*

  1. Icono pequeño : obligatorio , se puede configurar con setSmallIcon().
  2. Nombre de la aplicación : proporcionado por el sistema.
  3. Marca de tiempo : proporcionada por el sistema, pero se puede anular.
  4. Icono grande : opcional , se puede configurar con setLargeIcon().
  5. Título : opcional , se puede establecer con setContentTitle().
  6. Texto : opcional , se puede configurar con setContentText().

Nota: Canales de notificación
Desde la introducción de la versión 8 de Android (Android Oreo), ahora es obligatorio categorizar todas las notificaciones en categorías denominadas «canales», esto es para comodidad de los usuarios y también de los desarrolladores.
La imagen a continuación nos muestra un canal de notificación llamado ‘Notificación de progreso’.
\\*

\\*
Since we only need to create a channel once, we’ll use a helper class ‘App.kt’ to get the job done.

aplicación.kt

package com.gfg.progressnotificationdemo
   
import android.app.Application
import android.app.NotificationChannel
import android.app.NotificationManager
import android.os.Build
   
class App : Application(){
    val channelId = "Progress Notification" as String
   
    override fun onCreate(){
        super.onCreate()
        createNotificationChannels()
    }
       
    //Check if the Android version is greater than 8. (Android Oreo)
    private fun createNotificationChannels(){
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            val channel1 = NotificationChannel(
                channelId,
                "Progress Notification",
    //IMPORTANCE_HIGH = shows a notification as peek notification.
    //IMPORTANCE_LOW = shows the notification in the status bar.
                NotificationManager.IMPORTANCE_HIGH
            )
            channel1.description = "Progress Notification Channel"
            val manager = getSystemService(
                NotificationManager::class.java
            )
            manager.createNotificationChannel(channel1)
        }
    }
}

\\*
Now, in the main activity we’ll use a thread to invoke the notification.
\\*

MainActivity.kt

package com.gfg.progressnotificationdemo
   
import android.app.PendingIntent
import android.content.Intent
import android.os.Bundle
import android.os.SystemClock
import android.view.View
import androidx.appcompat.app.AppCompatActivity
import androidx.core.app.NotificationCompat
import androidx.core.app.NotificationManagerCompat
import com.gfg.progressnotificationdemo.R.drawable
   
   
class MainActivity : AppCompatActivity(){
   
    private lateinit var notificationManager: NotificationManagerCompat
    val channelId = "Progress Notification" as String
   
    override fun onCreate(savedInstanceState: Bundle?){
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
   
    //Create a Notification Manager
        notificationManager = NotificationManagerCompat.from(this)
   
    }
   
    //Start() is called when the buttons is pressed.
    public fun start(view: View){
   
        val intent = Intent(this, MainActivity::class.java).apply{
            flags = Intent.FLAG_ACTIVITY_NEW_TASK or 
            Intent.FLAG_ACTIVITY_CLEAR_TASK
        }
   
        val pendingIntent: PendingIntent = PendingIntent.getActivity(
         this, 0, intent, 0)
   
    //Sets the maximum progress as 100
        val progressMax = 100
    //Creating a notification and setting its various attributes
        val notification =
            NotificationCompat.Builder(this, channelId)
                .setSmallIcon(drawable.ic_file_download)
                .setContentTitle("GeeksforGeeks")
                .setContentText("Downloading")
                .setPriority(NotificationCompat.PRIORITY_LOW)
                .setOngoing(true)
                .setOnlyAlertOnce(true)
                .setProgress(progressMax, 0, true)
                .setContentIntent(pendingIntent)
                .setAutoCancel(true)
   
    //Initial Alert
        notificationManager.notify(1, notification.build())
   
        Thread(Runnable{
            SystemClock.sleep(2000)
            var progress = 0
            while (progress <= progressMax) {
                SystemClock.sleep(
                    1000
                )
                progress += 20
    //Use this to make it a Fixed-duration progress indicator notification
   
    //notification.setContentText(progress.toString()+"%")
    //.setProgress(progressMax, progress, false)
   
    //notificationManager.notify(1, notification.build())
            }
      
            notification.setContentText("Download complete")
                .setProgress(0, 0, false)
                .setOngoing(false)
            notificationManager.notify(1, notification.build())
        }).start()
    }
}

Actividad Principal.xml

El diseño consta de un solo botón.

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity"
    android:orientation="vertical">
   
    <Button
        android:layout_width="wrap_content"
        android:layout_height="75dp"
        android:onClick="start"
        android:text="Show Notification"
        android:textSize="22sp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
   
</androidx.constraintlayout.widget.ConstraintLayout>

\\*

Producción:

  • Indicador de progreso de duración fija: (después de agregar código en los comentarios en la línea 67 de MainActivity.kt)
    \\*
  • Indicador de progreso indeterminado:
    \\*
  • Después de la descarga:
    \\*

Así de fácil y sencillo es agregar un indicador de progreso a una notificación en Android usando Kotlin.

Publicación traducida automáticamente

Artículo escrito por Kiza y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *