我基于此 link 在我的应用程序中集成了 exoplayer .
我在 createCurrentContentIntent() 中添加了一个待处理的 Intent 。
return PendingIntent.getActivity(
context, 0,
Intent(context, MyActivity::class.java), 0
)
我在这里遇到一个问题。我开始播放音频,播放器通知也出现在状态栏中。我的要求是即使应用程序在后台也能播放音频。所以,我还没有在 onStop() 中释放播放器。我在 onDestroy() 中添加了以下代码。 override fun onDestroy() {
playerNotificationManager?.setPlayer(null)
player?.stop()
player?.release()
player = null
super.onDestroy()
}
如果我在播放器播放时从后台手动终止应用程序,则通知不会关闭。因此,如果我单击通知,它将与 NullPointerException 一起崩溃,因为 MyActivtity 已不复存在。有人可以提出相同的解决方案吗?
最佳答案
我已经实现了 ExoPlayer 和 MediaSessionCompat
和 MediaSessionConnector
,它允许 Exo 隐式管理媒体通知(以及音频焦点之类的东西)。
class MyServiceClass {
private lateinit var player: SimpleExoPlayer
private lateinit var playerNotificationManager: PlayerNotificationManager
private lateinit var mediaSession: MediaSessionCompat
private lateinit var mediaSessionConnector: MediaSessionConnector
override fun onCreate() {
super.onCreate()
player = ...
playerNotificationManager = ...
mediaSession = MediaSessionCompat(this, CONSTANT).apply{ ..setup callback... }
mediaSessionConnector = MediaSessionConnector(mediaSession)
mediaSessionConnector.setPlayer(player)
playerNotificationManager.setMediaSessionToken(mediaSession.token)
playerNotificationManager.setPlayer(player)
}
override fun onDestroy() {
mediaSession.isActive = false
mediaSession.release()
mediaSessionConnector.setPlayer(null)
playerNotificationManager.setPlayer(null)
player.release()
super.onDestroy()
}
}
当您终止应用程序时,这应该处理删除通知。我还使用 PlayerNotificationReceiver 来响应系统的通知更改,这在上面的代码中被省略了。此外,应用程序中触发和响应通知的整个部分也被省略了。
关于android - Exoplayer 通知未清除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67636713/