繁体   English   中英

Android Kotlin - 当应用程序进入后台时 ExoPlayer 继续播放

[英]Android Kotlin - ExoPlayer keeps playing when app goes to background

到目前为止,我只发现了有关如何让 ExoPlayer 在应用程序进入后台时继续播放的问题。 为什么我在没有编码这个bs的情况下会出现这种情况?

这是我到目前为止所拥有的,它在 RecyclerView OnBingViewHolder 中:

val player = ExoPlayer.Builder(context).build()
val mediaItem: MediaItem = MediaItem.fromUri(fileUrl)
player.setMediaItem(mediaItem)
player.repeatMode = Player.REPEAT_MODE_ONE
holder.vidPlayer.player = player
player.prepare()
player.seekTo(100)
// player.play()
holder.vidPlayer.setTag(mpTag, player)
holder.vidPlayer.setTag(manuelPlayTag, false)
holder.vidPlayer.setTag(manuelPauseTag, false)

player.addListener(object : Player.Listener { // player listener

    override fun onPlayerStateChanged(playWhenReady: Boolean, playbackState: Int) {
        if (playWhenReady && playbackState == Player.STATE_READY) {
            Log.d(tagg, "state: plays")
            holder.vidPlayer.hideController()
        } else if (playWhenReady) {
            // might be idle (plays after prepare()),
            // buffering (plays when data available)
            // or ended (plays when seek away from end)
        } else {
            Log.d(tagg, "state: pause")
            holder.vidPlayer.showController()
        }
    }
})

当应用程序进入后台时如何防止播放?

当您的应用程序进入后台时,将调用活动 Fragment/Activity 的生命周期方法onPause (和onStop )。 onPause方法中,您可以循环浏览绑定的 ViewHolders并停止视频播放器。

当应用程序进入后台时,您可以简单地stop ExoPlayer。

override fun onStop() {
    super.onStop()
    simpleExoPlayer.stop()
}

onStart中再次prepare() ExoPlayer:

override fun onStart() {
    super.onStart()
    simpleExoPlayer.prepare()
}

为了自动播放媒体,您需要设置playWhenReady = true

simpleExoPlayer.playWhenReady = true

通过设置playWhenReady = true它将自动播放内容,我们不需要显式调用simpleExoPlayer.play()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM