在我的 Android 应用程序中,我正在下载Foreground Service
中的文件。在开始下载之前,我正在显示进度为 0 的通知,然后在NotificationBuilder
中更新进度。我面临的问题是通知小图标在NotificationBuilder
中更新时保持闪烁,即使我正在重复使用相同的NotificationBuilder
。我也设置了setOngoing=true
下面是我的代码
import android.app.NotificationManager
import android.app.Service
import android.content.Context
import android.content.Intent
import android.os.Build
import android.os.IBinder
import androidx.annotation.Nullable
import androidx.core.app.NotificationCompat
import com.downloader.OnDownloadListener
import com.downloader.PRDownloader
import java.util.*
cl ForegroundService() : Service() {
val testPathDir = "/storage/emulated/0/MyAppFolder”
val testVideoLink =
"https://scontent.fisb6-2.fna.fbcdn.net/v/t66.36240-6/121382477_483887163110055_1614404568115456703_n.mp4?_nc_cat=104&ccb=1-5&_nc_sid=985c63&efg=eyJ2ZW5jb2RlX3RhZyI6Im9lcF9zZCJ9&_nc_ohc=hxnnGTvs10gAX_4BaOw&_nc_ht=scontent.fisb6-2.fna&oh=00_AT9SCG-m8bEJsfsyFNKQEZZFcG7JdiNcL05cZjoPekq1Eg&oe=621C0873"
private val notificationManager =
MyApplication.applicationContext()
.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
private var totalProgress = 0L
private var maxProgress = 100
override fun onCreate() {
super.onCreate()
}
override fun onStartCommand(intent: Intent, flags: Int, startId: Int): Int {
val notificationId: Int = intent.getIntExtra("notificationId", 0)
val channelId =
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
createNotificationChannel(
"my_service123", "My Background Service124",
NotificationManager.IMPORTANCE_HIGH,
MyApplication.applicationContext()
)
} else {
"my_service123"
}
val notificationBuilder = NotificationCompat.Builder(
MyApplication.applicationContext(),
channelId
)
notificationBuilder
.setContentTitle("Downloading")
.setTicker("Downloader")
.setSmallIcon(R.drawable.ic_icon_1_copy_2)
.setOngoing(true)
.setProgress(100, 0, false)
.build()
startForeground(notificationId, notificationBuilder.build());
notificationManager.notify(notificationId, notificationBuilder.build())
//do heavy work on a background thread
downlaodVideo(notificationId, notificationBuilder)
return START_NOT_STICKY
}
override fun onDestroy() {
super.onDestroy()
}
@Nullable
override fun onBind(intent: Intent?): IBinder? {
return null
}
private fun updateNotification(
notificationId: Int,
currentProgress: Int,
notificationBuilder: NotificationCompat.Builder
) {
notificationBuilder.setProgress(maxProgress, currentProgress, false)
notificationManager.notify(notificationId, notificationBuilder.build())
}
private fun downlaodVideo(
notificationId: Int,
notificationBuilder: NotificationCompat.Builder
) {
val testFileName = Random(System.currentTimeMillis()).nextInt(1000).toString() + ".mp4"
PRDownloader.download(testVideoLink, testPathDir, testFileName.toString())
.build()
.setOnStartOrResumeListener {
Thread.sleep(150)
}
.setOnPauseListener { }
.setOnCancelListener { }
.setOnProgressListener {
totalProgress = it.totalBytes
val currentProgress = (it.currentBytes * 100 / totalProgress).toInt()
updateNotification(notificationId, currentProgress, notificationBuilder)
}
.start(object : OnDownloadListener {
override fun onDownloadComplete() {
val doneNotifId = Random(System.currentTimeMillis()).nextInt(1000)
showNotification(
MyApplication.applicationContext(),
doneNotifId,
"test",
"mp4",
testVideoLink
)
stopForeground(true)
}
override fun onError(error: com.downloader.Error?) {
val errMsg = error?.serverErrorMessage
}
})
}
}
有人可以帮我吗?任何帮助将不胜感激。
非常感谢。

尝试将.setOnlyAlertOnce(true)
添加到通知生成器
notificationBuilder
.setContentTitle("Downloading")
.setTicker("Downloader")
.setSmallIcon(R.drawable.ic_icon_1_copy_2)
.setOngoing(true)
.setOnlyAlertOnce(true)
.setProgress(100, 0, false)
.build()
See thedocumentation
您可以选择调用 setOnlyAlertOnce(),以便您的通知仅在通知首次出现时中断用户(声音,振动或视觉线索),而不是以后的更新。
本站系公益性非盈利分享网址,本文来自用户投稿,不代表码文网立场,如若转载,请注明出处
评论列表(8条)