Crear una notificación expandible que contenga una imagen en Android

La notificación es un tipo de mensaje que genera cualquier aplicación presente dentro del teléfono móvil, sugiriendo verificar la aplicación y esto puede ser desde una actualización (notificación de baja prioridad) hasta algo que no va bien en la aplicación (notificación de alta prioridad) . en Algunos ejemplos de la vida diaria podrían ser las notificaciones adjuntas por Whatsapp, Gmail, SMS, etc. en el cajón de notificaciones, donde el usuario puede expandirlo y encontrar algunos detalles sobre el mensaje recibido, como el nombre del remitente, el asunto y alguna parte del texto. en el caso de Gmail. En este artículo, vamos a crear una notificación dentro de una aplicación que contenga una imagen.

expandable notification

Acercarse

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.

Paso 2: modificar el archivo activity_main.xml

Dentro del archivo XML, simplemente agregue un botón, que al hacer clic crearía una notificación expandible. Al expandir la notificación desde el cajón de notificaciones, se mostraría una imagen.

activity_main.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"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    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:text="click"
        android:layout_centerInParent="true"/>
  
</RelativeLayout>

Paso 3: Modificar el archivo MainActivity

Ahora, mire el código a continuación que está en Kotlin. Crear una notificación

MainActivity.kt

package com.example.expandablenotification
  
import android.app.*
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 androidx.appcompat.app.AppCompatActivity
  
class MainActivity : AppCompatActivity() {
  
    // Assigning variables to Notification Manager, Channel and Builder
    lateinit var notifManager: NotificationManager
    lateinit var notifChannel: NotificationChannel
    lateinit var notifBuilder: Notification.Builder
  
    // Evaluating ChannelID and Description for the Custom Notification
    private val description = "Some Description"
    private val channelID = "Some Channel ID"
  
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
  
        // Declaring the button which onclick generates a notification
        val btn = findViewById<Button>(R.id.btn)
  
        // Notification Service for the Manager
        notifManager = getSystemService(Context.NOTIFICATION_SERVICE)
                as NotificationManager
  
        // Notifications are in the form of Intents
        val someintent = Intent(this, LauncherActivity::class.java)
        val pendingIntent = PendingIntent.getActivity(
            this, 0, someintent,
            PendingIntent.FLAG_UPDATE_CURRENT
        )
  
        // Idea is to click the button and the notification appears
        btn.setOnClickListener {
            // This is how an Image to be displayed in our Notification
            // is decoded and stored in a variable. I've added a picture
            // named "download.jpeg" in the "Drawables".
            val myBitmap = BitmapFactory.decodeResource(resources, 
                                                        R.drawable.download)
  
            // If Min. API level of the phone is 26, then notification could be
            // made asthetic
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                notifChannel = NotificationChannel(
                    channelID, description,
                    NotificationManager.IMPORTANCE_HIGH
                )
                notifChannel.enableLights(true)
                notifChannel.lightColor = Color.RED
                notifChannel.enableVibration(true)
  
                notifManager.createNotificationChannel(notifChannel)
  
                notifBuilder = Notification.Builder(this, channelID)
                    .setContentTitle("Some Title")
                    .setContentText("Some Content Text")
                    .setSmallIcon(R.mipmap.ic_launcher_round)
  
                    // Command to Insert Image in the Notification
                    .setStyle(
                        Notification.BigPictureStyle() // <---- Look here
                            .bigPicture(myBitmap)
                    ) // <---- Look here
                    .setContentIntent(pendingIntent)
            }
            // Else the Android device would give out default UI attributes
            else {
                notifBuilder = Notification.Builder(this)
                    .setContentTitle("Some Title")
                    .setContentText("Some Content Text")
                    .setContentIntent(pendingIntent)
            }
  
            // Everything is done now and the Manager is to be notified about
            // the Builder which built a Notification for the application
            notifManager.notify(1234, notifBuilder.build())
        }
    }
}

Nota: si ha buscado previamente el código para notificaciones expandibles, entonces debe haber visto esta línea de código en particular:

 “.setStyle(NotificationCompat.BigPictureStyle().bigPicture(myBitmap)”

Como «NotificationCompat» está actualmente en desuso y su código siempre se bloquea cada vez que se intenta generar una notificación (al hacer clic en el botón en nuestro caso). En su lugar, simplemente use «Notificación».

Salida: ejecutar en el emulador

Publicación traducida automáticamente

Artículo escrito por aashaypawar 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 *