В процессе создания приложения с таймером возникла странная ситуация, связанная с обслуживанием на переднем плане и уведомлениями.Приложение содержит несколько таймеров в службе.Когда таймер запускается, Сервис запускает пользовательский отсчет времени и обновляет оставшееся время таймера в уведомлении;нет проблем.Проблема возникает, когда запускается второй таймер.В этом случае уведомление службы Foreground «всплывает» и «отклоняется» так быстро, что уведомление не видно.
Вопрос в том, как я могу разместить 2 отдельных таймера onTick () для одного и того же канала на отдельных строках в том же порядке?
Уведомление должно выглядеть следующим образом:
App
1:50 remaining
0:30 remaining
Вот некоторый код из службы для контекста.Код объектов таймера onTick () (имейте в виду, у нас есть несколько объектов Timer):
private fun createTimer(timerTime: Long, timerID: Long):EnkelTimer{
val timerID_Int = timerID.toInt()
return object : EnkelTimer(
countdownInterval = 1000,
millisInFuture = 1000 * timerTime,
id = timerID){
override fun onFinish() {
//TODO Notification that we are done
activeTimers.remove(this)
if (activeTimers.size<2){
stopForegroundService()
}
}
override fun onTick(millisUntilFinished: Long) {
startForeground(timerID_Int, notificationFromTimeRemaining(millisUntilFinished))
}
}
}
Код уведомления:
private fun notificationFromTimeRemaining(millisUntilFinished: Long): Notification{
val notifChannel = if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.O){
createNotificationChannel()
} else {""}
val notifBuilder = NotificationCompat.Builder(this, notifChannel)
with(notifBuilder){
setSmallIcon(R.drawable.play)
setStyle(NotificationCompat.BigTextStyle())
setContentTitle(numberOfTimersRunningText())
setContentText("${DateUtils.formatElapsedTime(millisUntilFinished/1000)}")
setShowWhen(false)
setAutoCancel(false)
setChannelId(CHANNEL)
}
return notifBuilder.build()
}
Код канала уведомления:
@RequiresApi(Build.VERSION_CODES.O)
private fun createNotificationChannel():String{
val name = "Timers"
val description = "A channel for Enkel timers"
val importance = NotificationManager.IMPORTANCE_LOW
val notificationChannel = NotificationChannel(CHANNEL, name, importance)
notificationChannel.description = description
val notificationManager: NotificationManager =
getSystemService(NotificationManager::class.java)
notificationManager.createNotificationChannel(notificationChannel)
return CHANNEL
}