Kotlin 中的 Android 进度通知
在本教程中,您将学习如何使用 Kotlin 为 Android 创建一个基本的进度通知(不确定进度指示器和固定持续时间进度指示器) 。
在开始之前,让我们先了解一下 Android 中 Notification 的组成部分。
- 小图标-必需,可以使用setSmallIcon() 设置。
- 应用程序名称-由系统提供。
- 时间戳-由系统提供,但可以被覆盖。
- 大图标-可选,可以使用setLargeIcon() 设置。
- Title –可选,可以使用setContentTitle() 设置。
- Text –可选,可以使用setContentText() 设置。
注意:通知渠道
自 Android 版本 8 (Android Oreo) 推出以来,现在必须将所有通知分类到称为“频道”的类别中,这是为了方便用户和开发人员。
下图向我们展示了一个名为“进度通知”的通知通道。
由于我们只需要创建一次频道,我们将使用一个帮助类“App.kt”来完成工作。
应用程序.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()
}
}
活动主.xml
布局由一个按钮组成。
输出:
- 固定持续时间进度指示器:(在 MainActivity.kt 第 67 行的注释中添加代码后)
- 不确定的进度指示器:
- 下载后:
这就是使用 Kotlin 向 Android 中的通知添加进度指示器是多么容易和简单。