gpt4 book ai didi

android - Exoplayer 通知未清除

转载 作者:行者123 更新时间:2023-12-05 00:03:02 28 4
gpt4 key购买 nike

我基于此 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 和 MediaSessionCompatMediaSessionConnector ,它允许 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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com