android - Exoplayer 通知未清除

标签 android exoplayer exoplayer2.x

我基于此 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/

相关文章:

android - 如何从 ExoPlayer Cast 扩展创建 CastPlayer?

android - CardView和其他 View 未显示在android studio布局编辑器中

android - 使用指南时在 ConstraintLayout 中正确设置约束

c# - Xamarin Forms Android 键盘向上移动整个页面

android - 当我播放第二个视频时,只显示第一个视频的卡住帧并播放音频

java - 在屏幕上旋转时,仅应显示视频

android - Exoplayer - 如何在重复模式下防止重新缓冲?

java - 在 Go 中将 C.jstring 转换为 native 字符串

android - 如何在 exoplayer 上播放来自 websocket url 的视频流?

android - 偶尔出现 "Too much time to handle tune request"错误