#android #exoplayer #exoplayer2.x
#Android #exoplayer #exoplayer2.x
Вопрос:
Я столкнулся с очень странной проблемой при использовании PlayerNotificationManager exoplayer для отображения уведомлений игрока. Я использую следующий код для отображения уведомлений на переднем плане:
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()
}
//...
}
Он работает, как и ожидалось, когда воспроизводится музыка и приложение отключено (удалено из формы «Недавно»), уведомление сохраняется, а музыка продолжает воспроизводиться.
Но если приостановить музыку и очистить уведомление (которое должно быть очищено, так как музыка не воспроизводится), а затем закрыть приложение, оно покажет неотменяемое уведомление (которое не должно отображаться) с помощью кнопки паузы, но кнопка паузы не работает, и звук тоже не воспроизводится.
Как я могу предотвратить отображение уведомлений, когда приложение отключено, а проигрыватель находится в состоянии паузы?
Ответ №1:
Я смог решить эту проблему, переопределив onTaskRemoved в моем сервисе.
override fun onTaskRemoved(rootIntent: Intent?) {
super.onTaskRemoved(rootIntent)
if (player.isPlaying == false)
stopForeground(true)
}
Эта функция вызывается, когда пользователь удаляет задачу приложения. Здесь мы можем проверить, нужно ли нам, чтобы наш сервис продолжал работать.