Skip to content
geeksforgeeks
  • Tutorials
    • Python
    • Java
    • Data Structures & Algorithms
    • ML & Data Science
    • Interview Corner
    • Programming Languages
    • Web Development
    • CS Subjects
    • DevOps And Linux
    • School Learning
    • Practice Coding Problems
  • Courses
    • DSA to Development
    • Get IBM Certification
    • Newly Launched!
      • Master Django Framework
      • Become AWS Certified
    • For Working Professionals
      • Interview 101: DSA & System Design
      • Data Science Training Program
      • JAVA Backend Development (Live)
      • DevOps Engineering (LIVE)
      • Data Structures & Algorithms in Python
    • For Students
      • Placement Preparation Course
      • Data Science (Live)
      • Data Structure & Algorithm-Self Paced (C++/JAVA)
      • Master Competitive Programming (Live)
      • Full Stack Development with React & Node JS (Live)
    • Full Stack Development
    • Data Science Program
    • All Courses
  • Java
  • Android
  • Kotlin
  • Flutter
  • Dart
  • Android with Java
  • Android Studio
  • Android Projects
  • Android Interview Questions
Open In App
Next Article:
How to Push Notification in Android?
Next article icon

How to Push Notification in Android?

Last Updated : 04 Feb, 2025
Comments
Improve
Suggest changes
Like Article
Like
Report

A notification is a message that appears outside of our Application's normal UI. A notification can appear in different formats and locations such as an icon in the status bar, a more detailed entry in the notification drawer, etc. Through the notification, we can notify users about any important updates, events of our application. By clicking the notification user can open any activity of our application or can do some action like opening any webpage etc. 

How Does Notification Look?

Let's see the basic design of a notification template that appears in the navigation drawer. 

How Does Notification Look


Part of a Notification 

Method for defining contents 

Type of argument needs to pass into the method

Small IconsetSmallIcon()Drawable file
App NameBy default, App Name is provided by the System and we can't override it.
TimestampBy default, timeStamp is provided by the System but we can override it by setWhen() method.Long (in milliseconds)
TitlesetContentTitle()String
TextsetContentText()String
Large IconsetLargeIcon()Bitmap image

Understand Some Important Concepts of Push a Notification

We shall discuss all the concepts mentioned below step by step,

  1. Creating a basic notification
  2. Creating notification channel
  3. Adding large icon
  4. Making notification expandable
  5. Making notification clickable
  6. Adding an action button to our notification

1. Creating a basic notification 

Tocreate a basic notification at first we need to build a notification. Now to build notification, we must use NotificationCompat.Builder() class where we need to pass a context of activity and a channel id as an argument while making an instance of the class. Please note here we are not using Notification.Builder(). NotificationCompat gives compatibility to upper versions (Android 8.0 and above) with lower versions (below Android 8.0).

Java
// Build the notification NotificationCompat.Builder builder = new NotificationCompat.Builder(this, CHANNEL_ID)     .setSmallIcon(R.drawable.gfg_logo) // Notification icon     .setContentTitle("Hello") // Title displayed in the notification     .setContentText("Welcome to GeeksforGeeks!!") // Text displayed in the notification     .setPriority(NotificationCompat.PRIORITY_HIGH); // Notification priority for better visibility 
Kotlin
// Build the notification val builder = NotificationCompat.Builder(this, CHANNEL_ID)   .setSmallIcon(R.drawable.gfg_logo) // Notification icon   .setContentTitle("Hello") // Title displayed in the notification   .setContentText("Welcome to GeeksforGeeks!!") // Text displayed in the notification   .setPriority(NotificationCompat.PRIORITY_HIGH) // Notification priority for better visibility   

Please note, here we need to set the priority of the notification accordingly by the setPriority() method.

Now to deliver the notification we need an object of NotificationManagerCompat class and then we notify it.

Java
// Display the notification NotificationManagerCompat notificationManager = NotificationManagerCompat.from(this); notificationManager.notify(NOTIFICATION_ID, builder.build()); 
Kotlin
// Display the notification with(NotificationManagerCompat.from(this)) {   notify(NOTIFICATION_ID, builder.build()) } 

Please note that, in this method, we can deliver notification only in the android versions below 8.0 but in the android versions 8.0 and upper, no notification will appear by only this block of code.

2. Creating a notification channel

Now to deliver notifications on android version 8.0 and above versions, we need to create a notification channel. This  Notification Channel concept comes from android 8.0. Here every application may have multiple channels for different types of notifications and each channel has some type of notification. Before you can deliver the notification on Android 8.0 and above versions, you must register your app's notification channel with the system by passing an instance of NotificationChannel to createNotificationChannel().

Java
/**  * Create a notification channel for devices running Android 8.0 or higher.  * A channel groups notifications with similar behavior.  */ private void creatingNotificationChannel() {     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {         NotificationChannel notificationChannel = new NotificationChannel(             channelId,             description,             NotificationManager.IMPORTANCE_HIGH         );         notificationChannel.enableLights(true); // Turn on notification light         notificationChannel.setLightColor(Color.GREEN);         notificationChannel.enableVibration(true); // Allow vibration for notifications          NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);         notificationManager.createNotificationChannel(notificationChannel);     } } 
Kotlin
/**  * Create a notification channel for devices running Android 8.0 or higher.  * A channel groups notifications with similar behavior.  */ private fun creatingNotificationChannel() {   if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {     val notificationChannel = NotificationChannel(       channelId,       description,       NotificationManager.IMPORTANCE_HIGH     ).apply {       enableLights(true) // Turn on notification light       lightColor = Color.GREEN       enableVibration(true) // Allow vibration for notifications     }      val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager     notificationManager.createNotificationChannel(notificationChannel)   } } 

Please note that here we must provide a unique CHANNEL_ID for each channel and also we must give a CHANNEL_NAME and CHANNEL_DESCRIPTION, and channel importance level.

3. Adding a large icon

To set a large icon we use the setLargeIcon() method which is applied to the instance of the NotificationCompat.Builder() class. In this method, we need to pass a Icon or Bitmap form of an image. Now to convert an image file (e.g. jpg, jpeg, png, etc.)  of the drawable folder into a Bitmap or an Icon, we use the following code in Kotlin

Java
// Converting resource file to icon Icon icon = Icon.createWithResource(this, R.drawable.gfg_logo);  // Converting resource file to bitmap image Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.gfg_logo);  // Build the notification NotificationCompat.Builder builder = new NotificationCompat.Builder(this, CHANNEL_ID)     .setSmallIcon(R.drawable.gfg_logo)     .setContentTitle("Hello")     .setContentText("Welcome to GeeksforGeeks!!")     .setPriority(NotificationCompat.PRIORITY_HIGH)     // Pass the icon or bitmap image     .setLargeIcon(bitmap); // or use .setLargeIcon(icon) depending on your requirement 
Kotlin
// converting resource file to icon val icon: Icon = Icon.createWithResource(this, R.drawable.gfg_logo) // converting resource file to bitmap image val bitmap: Bitmap =  BitmapFactory.decodeResource(resources, R.drawable.gfg_logo)  // Build the notification val builder = NotificationCompat.Builder(this, CHANNEL_ID)   .setSmallIcon(R.drawable.gfg_logo)   .setContentTitle("Hello")   .setContentText("Welcome to GeeksforGeeks!!")   .setPriority(NotificationCompat.PRIORITY_HIGH)   // pass the icon or bitmap image   .setLargeIcon(icon) 


4. Making notification expandable

In the short template of the notification, large information can't be shown. Therefore we need  to make the notification expandable like this:

imgonline-com-ua-resize-gm7SFwRck5o9ywT


to make such an expandable notification we use the setStyle() method on the notification builder (nBuilder) object. In this expanded area we can display an image, any text, different messages, etc. In our Application, we have added an image by passing the instance of the  NotificationCompat.BigPictureStyle class to setStyle() method.

imgonline-com-ua-resize-gm7SFwRck5o9ywT


Java
// Build the notification NotificationCompat.Builder builder = new NotificationCompat.Builder(this, CHANNEL_ID)     .setSmallIcon(R.drawable.gfg_logo)     .setLargeIcon(bitmap)     .setContentTitle("Hello")     .setContentText("Welcome to GeeksforGeeks!!")     .setPriority(NotificationCompat.PRIORITY_HIGH)     // Expandable notification     .setStyle(new NotificationCompat.BigPictureStyle()         .bigPicture(bitmap)  // Set the big image for the expanded view         .bigLargeIcon(null)   // Set null for bigLargeIcon to hide the large icon in the expanded view     ); 
Kotlin
// Build the notification val builder = NotificationCompat.Builder(this, CHANNEL_ID)   .setSmallIcon(R.drawable.gfg_logo)   .setLargeIcon(bitmap)   .setContentTitle("Hello")   .setContentText("Welcome to GeeksforGeeks!!")   .setPriority(NotificationCompat.PRIORITY_HIGH)   // Expandable notification   .setStyle(     NotificationCompat.BigPictureStyle()       .bigPicture(bitmap)       // as we pass null in bigLargeIcon() so the large icon        // will goes away when the notification will be expanded.       .bigLargeIcon(null as Bitmap?)   ) 

5. Making notification clickable

We need to make our notification clickable to perform some action by clicking the notification such as open an activity or system setting or any webpage etc. Now to perform such actions intent is needed (e.g. explicit or implicit intent). In our Application, we are making an Implicit intent to open the GFG official home page.

Java
// Creating the Implicit Intent to  // open the home page of GFG Intent intent = new Intent(); intent.setAction(Intent.ACTION_VIEW); intent.setData(Uri.parse("https://www.geeksforgeeks.org/")); 
Kotlin
// Creating the Implicit Intent to  // open the home page of GFG    val intent= Intent() intent.action=Intent.ACTION_VIEW intent.data=Uri.parse("https://www.geeksforgeeks.org/") 


Now it is not necessary that whenever the notification will appear then the user will click it instantly, user can click it whenever he /she wants and therefore we also need to make an instance of PendingIntent which basically makes the intent action pending for future purpose.

Java
// Here the four parameters are context of activity, // requestCode, Intent and flag of the pendingIntent respectively // The request code is used to trigger a // particular action in application activity PendingIntent pendingIntent = PendingIntent     .getActivity(         this, // context         5, // request code         intent, // intent         PendingIntent.FLAG_IMMUTABLE // flags     );  // Build the notification NotificationCompat.Builder builder = new NotificationCompat.Builder(this, CHANNEL_ID)     .setSmallIcon(R.drawable.gfg_logo)     .setContentTitle("Hello")     .setContentText("Welcome to GeeksforGeeks!!")     .setPriority(NotificationCompat.PRIORITY_HIGH)     .setContentIntent(pendingIntent) // Pending intent triggered when tapped     .setAutoCancel(true); // Dismiss notification when tapped 
Kotlin
// Here the four parameters are context of activity, // requestCode,Intent and flag of the pendingIntent respectively // The request code is used to trigger a // particular action in application activity val pendingIntent = PendingIntent   .getActivity(     this, // context     5, // request code     intent, // intent     PendingIntent.FLAG_IMMUTABLE // flags   )  // Build the notification val builder = NotificationCompat.Builder(this, CHANNEL_ID)   .setSmallIcon(R.drawable.gfg_logo)   .setContentTitle("Hello")   .setContentText("Welcome to GeeksforGeeks!!")   .setPriority(NotificationCompat.PRIORITY_HIGH)   .setContentIntent(pendingIntent) // Pending intent triggered when tapped   .setAutoCancel(true) // Dismiss notification when tapped 

6. Adding an action button to our notification

Sometimes there exists some action button at our notification template that is used to perform some action.

Here we also need an Intent and a PendingIntent. Then we need to pass the instance of the PendingIntent to addAction() method at the time of building the notification.

Java
// Creating the Implicit Intent  // to open the GFG contribution page    Intent intent = new Intent(); intent.setAction(Intent.ACTION_VIEW); intent.setData(Uri.parse("https://www.geeksforgeeks.org/contribute/"));  PendingIntent pendingIntent = PendingIntent.getActivity(this, 6, intent, PendingIntent.FLAG_IMMUTABLE);  // Build the notification NotificationCompat.Builder builder = new NotificationCompat.Builder(this, CHANNEL_ID)     .setSmallIcon(R.drawable.gfg_logo)     .setContentTitle("Hello")     .setContentText("Welcome to GeeksforGeeks!!")     .setPriority(NotificationCompat.PRIORITY_HIGH)     .setContentIntent(pendingIntent) // Pending intent triggered when tapped     .setAutoCancel(true) // Dismiss notification when tapped     // Here we need to pass 3 arguments which are      // icon id, title, pendingIntent respectively     // Here we pass 0 as icon id which means no icon     .addAction(0, "Let's Contribute", pendingIntent); 
Kotlin
// Creating the Implicit Intent  // to open the GFG contribution page    val intent = Intent() intent.action = Intent.ACTION_VIEW intent.data = Uri.parse("https://www.geeksforgeeks.org/contribute/")          val pendingIntent= PendingIntent.getActivity(this, 6, intent, PendingIntent.FLAG_IMMUTABLE)  // Build the notification val builder = NotificationCompat.Builder(this, CHANNEL_ID)   .setSmallIcon(R.drawable.gfg_logo)   .setContentTitle("Hello")   .setContentText("Welcome to GeeksforGeeks!!")   .setPriority(NotificationCompat.PRIORITY_HIGH)   .setContentIntent(pendingIntent) // Pending intent triggered when tapped   .setAutoCancel(true) // Dismiss notification when tapped   // Here we need to pass 3 arguments which are    // icon id, title, pendingIntent respectively   // Here we pass 0 as icon id which means no icon   .addAction(0,"Let's Contribute", pendingIntent) 

Example

Let discuss all the concepts by making an basic application. A sample GIF is given below to get an idea about what we are going to do in this article. Note that we are going to implement this project using the Kotlin/Java language. 


Step by Step Implementation

Step 1: Create a New Project

To create a new project in Android Studio please refer to How to Create/Start a New Project in Android Studio. Note that select Kotlin/Java as the programming language. Choose the API level according to your choice( Here we have chosen API Level 26).

Note: After creating the project successfully, please paste some pictures into the drawable folder in the res directory. Please follow this article if you don't know how to add image assets in your android project: How to add images in the android project?

This is what the folder structure should look like:

Notifications-folder-structure-android


Step 2:Adding Permission for notification

Android 13 (API level 33) and higher need a permission for posting notifications from an app. For this, declare permission in the manifest file. Please manually make sure that the permission for notifications is provided for this app on phone.

<uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>

Step 3: Working with the activity_main.xml file

Go to the activity_main.xml file and refer to the following code.

activity_main.xml:

XML
<?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:id="@+id/main"     android:layout_width="match_parent"     android:layout_height="match_parent"     android:background="@color/white"     tools:context=".MainActivity">      <ImageView         android:id="@+id/imageView"         android:layout_width="200dp"         android:layout_height="200dp"         android:layout_marginTop="70dp"         android:src="@drawable/gfg_logo"         android:layout_margin="20dp"         app:layout_constraintBottom_toTopOf="@+id/editText1"         app:layout_constraintEnd_toEndOf="parent"         app:layout_constraintStart_toStartOf="parent"         app:layout_constraintTop_toTopOf="parent"         app:layout_constraintVertical_chainStyle="packed" />      <!-- EditText for entering the title-->     <EditText         android:id="@+id/editText1"         android:layout_width="match_parent"         android:layout_height="wrap_content"         android:background="#d7ffd9"         android:hint="Enter The Title"         android:padding="10dp"         android:layout_margin="20dp"         android:textSize="20sp"         android:textStyle="bold"         app:layout_constraintBottom_toTopOf="@+id/editText2"         app:layout_constraintEnd_toEndOf="parent"         app:layout_constraintStart_toStartOf="parent"         app:layout_constraintTop_toBottomOf="@+id/imageView" />      <!-- EditText for entering the text-->     <EditText         android:id="@+id/editText2"         android:layout_width="match_parent"         android:layout_height="wrap_content"         android:layout_marginTop="30dp"         android:background="#d7ffd9"         android:hint="Enter The Text"         android:padding="10dp"         android:layout_margin="20dp"         android:textSize="20sp"         android:textStyle="bold"         app:layout_constraintBottom_toTopOf="@+id/button"         app:layout_constraintEnd_toEndOf="parent"         app:layout_constraintStart_toStartOf="parent"         app:layout_constraintTop_toBottomOf="@+id/editText1" />      <!-- Button for sending notification-->     <Button         android:id="@+id/button"         android:layout_width="wrap_content"         android:layout_height="wrap_content"         android:layout_marginTop="30dp"         android:backgroundTint="@color/green"         android:text="Send Notification"         android:textSize="24sp"         app:layout_constraintBottom_toBottomOf="parent"         app:layout_constraintEnd_toEndOf="parent"         app:layout_constraintStart_toStartOf="parent"         app:layout_constraintTop_toBottomOf="@+id/editText2" />  </androidx.constraintlayout.widget.ConstraintLayout> 

Layout:

push-notifications-android-layout-design


Step 4: Insert a vector asset into the drawable folder in the res directory

Right-click on the drawable folder → New → Vector Asset → select appropriate Clip Art → give appropriate Name and adjust Size accordingly→ Next then click on the finish button as shown in the below image.

Notification_Android


Step 5: Working with the MainActivity.kt file

Go to the MainActivity.kt file and refer to the following code. Below is the code for the MainActivity.kt file. Comments are added inside the code to understand the code in more detail.

MainActivity File:

Java
package org.geeksforgeeks.demo;  import android.Manifest; import android.annotation.SuppressLint; import android.app.NotificationChannel; import android.app.NotificationManager; import android.app.PendingIntent; import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Color; import android.graphics.drawable.Icon; import android.net.Uri; import android.os.Build; import android.os.Bundle; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; import androidx.appcompat.app.AppCompatActivity; import androidx.core.app.ActivityCompat; import androidx.core.app.NotificationCompat; import androidx.core.app.NotificationManagerCompat;  public class MainActivity extends AppCompatActivity {     private EditText editText1;     private EditText editText2;     private Button button;    	// Unique channel ID for notifications     public static final String CHANNEL_ID = "i.apps.notifications";         	// Unique identifier for the notification   	public static final int NOTIFICATION_ID = 1234;       	// Description for the notification channel     public static final String DESCRIPTION = "Test notification";        @Override     protected void onCreate(Bundle savedInstanceState)      {         super.onCreate(savedInstanceState);         setContentView(R.layout.activity_main);          button = findViewById(R.id.button);         editText1 = findViewById(R.id.editText1);         editText2 = findViewById(R.id.editText2);          // Create a notification channel (required for Android 8.0 and higher)         createNotificationChannel();          button.setOnClickListener(v -> {             // Request runtime permission for notifications on Android 13 and higher             if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {                 if (ActivityCompat.checkSelfPermission(MainActivity.this, Manifest.permission.POST_NOTIFICATIONS)                     	!= PackageManager.PERMISSION_GRANTED) {                     ActivityCompat.requestPermissions(MainActivity.this, new String[]                      	{Manifest.permission.POST_NOTIFICATIONS}, 101);                     return;                 }             }                      	// Trigger the notification             sendNotification();          });     }      /**      * Create a notification channel for devices running Android 8.0 or higher.      * A channel groups notifications with similar behavior.      */     private void createNotificationChannel() {         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {             NotificationChannel notificationChannel = new NotificationChannel(                     CHANNEL_ID,                     DESCRIPTION,                     NotificationManager.IMPORTANCE_HIGH             );                      	// Turn on notification light             notificationChannel.enableLights(true);                         	notificationChannel.setLightColor(Color.GREEN);                        	// Allow vibration for notifications           	notificationChannel.enableVibration(true);               NotificationManager notificationManager =                		(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);             notificationManager.createNotificationChannel(notificationChannel);         }     }      /**      * Build and send a notification with a custom layout and action.      */     private void sendNotification() {                // Intent that triggers when the notification is tapped         Intent intent = new Intent();         intent.setAction(Intent.ACTION_VIEW);         intent.setData(Uri.parse("https://www.geeksforgeeks.org/"));          PendingIntent pendingIntent = PendingIntent.getActivity(                 this, 6, intent, PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE         );          // Converting resource file to icon         Icon icon = Icon.createWithResource(this, R.drawable.gfg_logo);                // Converting resource file to bitmap image         Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.gfg_logo);          // Build the notification         NotificationCompat.Builder builder = new NotificationCompat.Builder(this, CHANNEL_ID)                 .setSmallIcon(R.drawable.baseline_notification) // Notification icon                 .setLargeIcon(bitmap)                 .setContentTitle(editText1.getText().toString()) // Title displayed in the notification                 .setContentText(editText2.getText().toString()) // Text displayed in the notification                 .setContentIntent(pendingIntent) // Pending intent triggered when tapped                 .setAutoCancel(true) // Dismiss notification when tapped                 .setPriority(NotificationCompat.PRIORITY_HIGH) // Notification priority for better visibility                 .setStyle(new NotificationCompat.BigPictureStyle()                         .bigPicture(bitmap)                         .bigLargeIcon(null))                 .addAction(0, "Let's Contribute", pendingIntent);          // Display the notification         NotificationManagerCompat.from(this).notify(NOTIFICATION_ID, builder.build());     } } 
Kotlin
package org.geeksforgeeks.demo  import android.Manifest import android.annotation.SuppressLint import android.app.NotificationChannel import android.app.NotificationManager import android.app.PendingIntent import android.content.Context import android.content.Intent import android.content.pm.PackageManager import android.graphics.Bitmap import android.graphics.BitmapFactory import android.graphics.Color import android.graphics.drawable.Icon import android.net.Uri import android.os.Build import android.os.Bundle import android.widget.Button import android.widget.EditText import androidx.appcompat.app.AppCompatActivity import androidx.core.app.ActivityCompat import androidx.core.app.NotificationCompat import androidx.core.app.NotificationManagerCompat  class MainActivity : AppCompatActivity() {     private lateinit var editText1: EditText     private lateinit var editText2: EditText     private lateinit var button: Button     override fun onCreate(savedInstanceState: Bundle?) {         super.onCreate(savedInstanceState)         setContentView(R.layout.activity_main)          button = findViewById(R.id.button)         editText1 = findViewById(R.id.editText1)         editText2 = findViewById(R.id.editText2)          // Create a notification channel (required for Android 8.0 and higher)         createNotificationChannel()          button.setOnClickListener {             // Request runtime permission for notifications on Android 13 and higher             if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {                 if (ActivityCompat.checkSelfPermission(                         this,                         Manifest.permission.POST_NOTIFICATIONS                     ) != PackageManager.PERMISSION_GRANTED                 ) {                     ActivityCompat.requestPermissions(                         this,                         arrayOf(Manifest.permission.POST_NOTIFICATIONS),                         101                     )                     return@setOnClickListener                 }             }             sendNotification() // Trigger the notification         }     }      /**      * Create a notification channel for devices running Android 8.0 or higher.      * A channel groups notifications with similar behavior.      */     private fun createNotificationChannel() {         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {             val notificationChannel = NotificationChannel(                 CHANNEL_ID,                 DESCRIPTION,                 NotificationManager.IMPORTANCE_HIGH             ).apply {                 enableLights(true) // Turn on notification light                 lightColor = Color.GREEN                 enableVibration(true) // Allow vibration for notifications             }              val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager             notificationManager.createNotificationChannel(notificationChannel)         }     }      /**      * Build and send a notification with a custom layout and action.      */     @SuppressLint("MissingPermission")     private fun sendNotification() {         // Intent that triggers when the notification is tapped         val intent= Intent()         intent.action=Intent.ACTION_VIEW         intent.data= Uri.parse("https://www.geeksforgeeks.org/")          val pendingIntent = PendingIntent.getActivity(             this, 6, intent, PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE         )                  // converting resource file to icon         val icon: Icon = Icon.createWithResource(this, R.drawable.gfg_logo)                  // converting resource file to bitmap image         val bitmap: Bitmap =  BitmapFactory.decodeResource(resources, R.drawable.gfg_logo)          // Build the notification         val builder = NotificationCompat.Builder(this, CHANNEL_ID)             .setSmallIcon(R.drawable.baseline_notification) // Notification icon             .setLargeIcon(bitmap)             .setContentTitle(editText1.text.toString()) // Title displayed in the notification             .setContentText(editText2.text.toString()) // Text displayed in the notification             .setContentIntent(pendingIntent) // Pending intent triggered when tapped             .setAutoCancel(true) // Dismiss notification when tapped             .setPriority(NotificationCompat.PRIORITY_HIGH) // Notification priority for better visibility             .setStyle(                 NotificationCompat.BigPictureStyle()                     .bigPicture(bitmap)                     .bigLargeIcon(null as Bitmap?)             )             .addAction(0,"Let's Contribute", pendingIntent)          // Display the notification         with(NotificationManagerCompat.from(this)) {             notify(NOTIFICATION_ID, builder.build())         }     }      companion object    	{       	// Unique channel ID for notifications         const val CHANNEL_ID = "i.apps.notifications"              	// Unique identifier for the notification         const val NOTIFICATION_ID = 1234               	// Description for the notification channel         const val DESCRIPTION = "Test notification"       } } 

Output:


Next Article
How to Push Notification in Android?

T

the_dir_one
Improve
Article Tags :
  • Technical Scripter
  • Kotlin
  • Android
  • Technical Scripter 2020
  • Kotlin Android
  • Java-Android

Similar Reads

    How to Schedule Notifications in Android?
    In this article, we will see the process of scheduling notifications in Android for specific dates and times and also it can run both in the foreground and background. This is particularly valuable when developing apps that allow users to be notified of events at predefined moments enhancing the ove
    5 min read
    How to Disable Notification in Android Studio?
    Android Studio is the official IDE (Integrated Development Environment) for Android app development and it is based on JetBrains’ IntelliJ IDEA software. Android Studio provides many excellent features that enhance productivity when building Android apps, such as: A blended environment where one can
    1 min read
    Notifications in Android Oreo (8+)
    Android Oreo has brought in a ton of changes. This also includes the way in which a user issue notifications in an app. In this article, we will discuss the changes required to be made in the notification department. The following things are to be kept in mind while issuing notifications:Designing a
    4 min read
    How To Add Push Notification Feature In ReactJS?
    Adding a push notification feature to your React application can significantly improve user engagement by delivering timely updates, alerts, or messages even when users are not actively using your app. Push notifications are commonly used for sending updates about new content, promotional offers, or
    3 min read
    How to Increase Push Notification Delivery Rate in Android?
    Notifications are an essential component of any application. Almost every application on your mobile device will send some kind of notification. The WhatsApp notification is one of the best examples of this. Whenever you receive a message, it is displayed on your phone in the form of notifications.
    8 min read
geeksforgeeks-footer-logo
Corporate & Communications Address:
A-143, 7th Floor, Sovereign Corporate Tower, Sector- 136, Noida, Uttar Pradesh (201305)
Registered Address:
K 061, Tower K, Gulshan Vivante Apartment, Sector 137, Noida, Gautam Buddh Nagar, Uttar Pradesh, 201305
GFG App on Play Store GFG App on App Store
Advertise with us
  • Company
  • About Us
  • Legal
  • Privacy Policy
  • In Media
  • Contact Us
  • Advertise with us
  • GFG Corporate Solution
  • Placement Training Program
  • Languages
  • Python
  • Java
  • C++
  • PHP
  • GoLang
  • SQL
  • R Language
  • Android Tutorial
  • Tutorials Archive
  • DSA
  • Data Structures
  • Algorithms
  • DSA for Beginners
  • Basic DSA Problems
  • DSA Roadmap
  • Top 100 DSA Interview Problems
  • DSA Roadmap by Sandeep Jain
  • All Cheat Sheets
  • Data Science & ML
  • Data Science With Python
  • Data Science For Beginner
  • Machine Learning
  • ML Maths
  • Data Visualisation
  • Pandas
  • NumPy
  • NLP
  • Deep Learning
  • Web Technologies
  • HTML
  • CSS
  • JavaScript
  • TypeScript
  • ReactJS
  • NextJS
  • Bootstrap
  • Web Design
  • Python Tutorial
  • Python Programming Examples
  • Python Projects
  • Python Tkinter
  • Python Web Scraping
  • OpenCV Tutorial
  • Python Interview Question
  • Django
  • Computer Science
  • Operating Systems
  • Computer Network
  • Database Management System
  • Software Engineering
  • Digital Logic Design
  • Engineering Maths
  • Software Development
  • Software Testing
  • DevOps
  • Git
  • Linux
  • AWS
  • Docker
  • Kubernetes
  • Azure
  • GCP
  • DevOps Roadmap
  • System Design
  • High Level Design
  • Low Level Design
  • UML Diagrams
  • Interview Guide
  • Design Patterns
  • OOAD
  • System Design Bootcamp
  • Interview Questions
  • Inteview Preparation
  • Competitive Programming
  • Top DS or Algo for CP
  • Company-Wise Recruitment Process
  • Company-Wise Preparation
  • Aptitude Preparation
  • Puzzles
  • School Subjects
  • Mathematics
  • Physics
  • Chemistry
  • Biology
  • Social Science
  • English Grammar
  • Commerce
  • World GK
  • GeeksforGeeks Videos
  • DSA
  • Python
  • Java
  • C++
  • Web Development
  • Data Science
  • CS Subjects
@GeeksforGeeks, Sanchhaya Education Private Limited, All rights reserved
We use cookies to ensure you have the best browsing experience on our website. By using our site, you acknowledge that you have read and understood our Cookie Policy & Privacy Policy
Lightbox
Improvement
Suggest Changes
Help us improve. Share your suggestions to enhance the article. Contribute your expertise and make a difference in the GeeksforGeeks portal.
geeksforgeeks-suggest-icon
Create Improvement
Enhance the article with your expertise. Contribute to the GeeksforGeeks community and help create better learning resources for all.
geeksforgeeks-improvement-icon
Suggest Changes
min 4 words, max Words Limit:1000

Thank You!

Your suggestions are valuable to us.

What kind of Experience do you want to share?

Interview Experiences
Admission Experiences
Career Journeys
Work Experiences
Campus Experiences
Competitive Exam Experiences