【问题标题】:Android ExoPlayer demo: continue playback with screen lockedAndroid ExoPlayer 演示:在屏幕锁定的情况下继续播放
【发布时间】:2020-11-22 16:19:08
【问题描述】:

我想修改 ExoPlayer 演示以允许在屏幕锁定时继续播放音频(无论正在播放的媒体是音频还是视频,这都应该有效)。根据一些提示(例如12),这是我目前想到的:

https://github.com/google/ExoPlayer/compare/release-v2...sedubois:background-playback

这直接基于 ExoPlayer 演示代码,当前版本为 2.12.1。它添加“前台”权限,注册服务,并在该服务中创建通知(根据文档,后台播放需要此通知)。该服务在初始化播放器时启动。

我可以启动播放器,演示如下图所示,带有音频流。此时通知已正确创建,它显示播放器详细信息(标题、描述、进度条)和控制按钮(见下图),它们可以正常工作(我可以播放/暂停、从头开始并向后/向前跳过) .

但是,当我最小化应用程序或按电源按钮锁定屏幕时,播放仍然停止。完成这项工作的正确方法是什么?

【问题讨论】:

  • 可能,它会在您的活动的 onStop/onPause 方法中停止播放。
  • 谢谢@sdex,我应该在这些方法的if语句中检查!player.isPlaying()吗?恢复的时候呢?如果我这样做,它允许在屏幕锁定时继续播放,但在解锁屏幕时,音频会跳回到屏幕锁定时的位置。
  • 另外,如果我只是在 onPause/onStop 中添加一个检查 !player.isPlaying(),那么当点击返回按钮退出播放器时播放器不会停止,所以再次进入时它会崩溃。

标签: android android-notifications exoplayer exoplayer2.x foreground-service


【解决方案1】:

只是为了确保我们在同一页面上。我正在测试 exoplayer repo 的 dev-v2 分支 here

PlayerActivity.java 中的onStop() 方法正在释放播放器,因此当应用程序进入后台时,将调用onStop() 并使用方法releasePlayer 释放播放器。 如果您将注释掉该方法,即不要在onStop() 中释放播放器,则播放器将在后台播放。

【讨论】:

  • 是的@Harneev,删除 releasePlayer 允许玩家在后台继续。但这也让玩家在停留在应用程序中时继续,但使用后退按钮导航离开(问题 #1)。然后,当通过选择另一个曲目重新进入播放器时,播放器崩溃(问题 #2)。如何确保播放器仅在最小化或屏幕锁定时继续播放,而在留在应用程序中时离开播放器屏幕时不继续播放?
  • 这将是您需要自己处理的活动生命周期处理。像onUserLeaveHint 这样的方法可以在用户按下主页或移动到另一个应用程序时发出通知,或者onBackPressed 可以在用户返回上一个活动或屏幕时发出通知。该视频也可以帮助您实现后台播放:youtube.com/watch?v=svdq1BWl4r8&t=1160s
猜你喜欢
  • 2021-11-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多