Отправка уведомлений таймера переднего плана на тот же канал - PullRequest
0 голосов
/ 11 октября 2018

В процессе создания приложения с таймером возникла странная ситуация, связанная с обслуживанием на переднем плане и уведомлениями.Приложение содержит несколько таймеров в службе.Когда таймер запускается, Сервис запускает пользовательский отсчет времени и обновляет оставшееся время таймера в уведомлении;нет проблем.Проблема возникает, когда запускается второй таймер.В этом случае уведомление службы 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
}
...