Exoplayer通知未清除
Exoplayer notification not clearing
基于此link,我将 exoplayer 集成到我的应用程序中。
我在 createCurrentContentIntent() 中添加了一个待定意图。
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 来响应系统通知的更改,这在上面的代码中被省略了。此外,在应用程序中触发和响应通知的整个部分也被省略了。
我更改了完整的实现并使用了 services。这解决了问题。
基于此link,我将 exoplayer 集成到我的应用程序中。
我在 createCurrentContentIntent() 中添加了一个待定意图。
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 来响应系统通知的更改,这在上面的代码中被省略了。此外,在应用程序中触发和响应通知的整个部分也被省略了。
我更改了完整的实现并使用了 services。这解决了问题。