Notifications in Android with Example

01 Jan, 2021
Notification is a kind of message, alert, or status of an application (probably running in the background) that is visible or available in the Android’s UI elements. This application could be running in the background but not in use by the user. The purpose of a notification is to notify the user about a process that was initiated in the application either by the user or the system. This article could help someone who’s trying hard to create a notification for developmental purposes. 
Notifications could be of various formats and designs depending upon the developer. In General, one must have witnessed these four types of notifications:
Status Bar Notification (appears in the same layout as the current time, battery percentage)Notification drawer Notification (appears in the drop-down menu)Heads-Up Notification (appears on the overlay screen, ex: Whatsapp notification, OTP messages)Lock-Screen Notification (I guess you know it)
Status Bar Notification (appears in the same layout as the current time, battery percentage)
Notification drawer Notification (appears in the drop-down menu)
Heads-Up Notification (appears on the overlay screen, ex: Whatsapp notification, OTP messages)
Lock-Screen Notification (I guess you know it)
In this article, we will be discussing how to produce notifications in Kotlin. 
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 as the programming language.
Step 2: Working with the activity_main.xml file
Go to the activity_main.xml file and refer to the following code. In this step, we are going to design our layout page. Here, we will use the RelativeLayout to get the Scroll View from the Kotlin file. Below is the code for the activity_main.xml file.
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>
Step 3: Create a new empty activity
Reference article: How to Create Constructor, Getter/Setter Methods and New Activity in Android Studio using Shortcuts? 
Name the activity as afterNotification. When someone clicks on the notification, this activity will open up in our app that is the user will be redirected to this page. Below is the code for the activity_after_notification.xml file.
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>
Note 1: Without configuring Notification Channels, you cannot build notification for applications with Android API >=26. For them generating a notification channel is mandatory. Apps with API<26 don’t need notification channels they just need notification builder. Each channel is supposed to have a particular behavior that will be applicable to all the notifications which are a part of it. Every channel will, therefore, have a Channel ID which basically will act as a unique identifier for this Channel which will be useful if the user wants to differentiate a particular notification channel. In contrast, the Notification builder provides a convenient way to set the various fields of a Notification and generate content views using the platform’s notification layout template but is not able to target a particular notification channel. 
Note 2: If you have referred any other documentation or any other blog before this one, you might have noticed them appealing to implement the following dependency“com.android.support:support-compat:28.0.0”. What I’ve personally experienced is that there’s no need to implement it, things go far and good without this also.
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.
Kotlin
import android.app.Notificationimport android.app.NotificationChannelimport android.app.NotificationManagerimport android.app.PendingIntentimport android.content.Contextimport android.content.Intentimport android.graphics.BitmapFactoryimport android.graphics.Colorimport android.os.Buildimport android.os.Bundleimport android.widget.Buttonimport android.widget.RemoteViewsimport 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())        }    }}
With this, we have now successfully created a “Notification” for our application. Note that the parameters listed in the above code are required and the absence of any single parameter could result in crashing or not starting the application. The content title, content text, small icon are customizable parameters but are mandatory also. One can change their values according to the requirement.
aashaypawar
omrisarig13
Kotlin Android
Picked
Kotlin
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Android RecyclerView in Kotlin
Kotlin constructor
Broadcast Receiver in Android With Example
Retrofit with Kotlin Coroutine in Android
Content Providers in Android with Example
Kotlin Setters and Getters
How to Add and Customize Back Button of Action Bar in Android?
Android Menus
How to Change the Color of Status Bar in an Android App?
Kotlin Higher-Order Functions