- Small Icon – Required, can be set with setSmallIcon().
- Application Name – Provided by the system.
- Time Stamp – Provided by the system but can be overridden.
- Large Icon – Optional, can be set with setLargeIcon().
- Title – Optional, can be set with setContentTitle().
- Text – Optional, can be set with setContentText().
App.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)
}
}
} |
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()
}
} |
Activity Main.xml
Layout consists of a single button.<?xml version= "1.0" encoding= "utf-8" ?>
<androidx.constraintlayout.widget.ConstraintLayout 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> |
Output:
- Fixed-duration progress indicator : (after adding code in comments at line 67 of MainActivity.kt)
- Indeterminate progress indicator :
- After Download :
Article Tags :