当播放器暂停且应用程序被终止时,ExoPlayer 通知重新出现

ExoPlayer notification re-appearing when player is paused and App is killed

我在使用 exoplayer 的 PlayerNotificationManager 显示玩家通知时遇到了一个非常奇怪的问题。我正在使用以下代码在前台显示通知:

class AudioPlayerService : LifecycleService() {
    private val notificationListener = object : PlayerNotificationManager.NotificationListener {
        override fun onNotificationPosted(
            notificationId: Int,
            notification: Notification,
            ongoing: Boolean
        ) {
            super.onNotificationPosted(notificationId, notification, ongoing)
            if (ongoing)
                startForeground(notificationId, notification)
            else
                stopForeground(false)
        }
    }

    override fun onCreate() {
        super.onCreate()
        playerNotificationManager = PlayerNotificationManager(
            this,
            CHANNEL_ID,
            NOTIFICATION_ID,
            descriptionAdapter,
            notificationListener
        ).apply {
            setFastForwardIncrementMs(0)
            setRewindIncrementMs(0)
            setUseNextAction(false)
            setUsePreviousAction(false)
            setUseStopAction(false)
            setUseChronometer(false)
        }
        //...
    }

    override fun onDestroy() {
        releasePlayer()
        super.onDestroy()
    }
    //...
}

当正在播放音乐且应用被终止(从最近清除)、通知持续存在且音乐继续播放时,它按预期工作。

但是如果暂停音乐并清除通知(应该清除,因为没有播放音乐),然后关闭应用程序,它会显示带有暂停按钮的不可关闭通知(不应显示),但暂停按钮会显示不工作,音频也不播放。

当应用程序被杀死且播放器处于暂停状态时,如何防止通知显示?

我能够通过在我的服务中覆盖 onTaskRemoved 来解决这个问题。

    override fun onTaskRemoved(rootIntent: Intent?) {
        super.onTaskRemoved(rootIntent)
        if (player.isPlaying == false)
            stopForeground(true)
    }

当用户移除App Task时调用该函数。我们可以在这里检查我们是否需要我们的服务来保持 运行.