Android ExoPlayer演示:锁定屏幕继续播放

Android ExoPlayer演示:锁定屏幕继续播放,android,android-notifications,exoplayer,exoplayer2.x,foreground-service,Android,Android Notifications,Exoplayer,Exoplayer2.x,Foreground Service,我想修改ExoPlayer演示,以允许在屏幕锁定时继续播放音频(无论播放的媒体是音频还是视频,这都应该有效)。根据一些提示(例如),这是我到目前为止想到的: 这直接基于ExoPlayer演示代码,目前版本为2.12.1。它添加“前台”权限,注册服务,并在该服务中创建通知(根据文档,后台播放需要此通知)。该服务在初始化播放机时启动 我可以启动播放器,演示如下图所示,带有音频流。此时,通知被正确创建,它显示了播放器的详细信息(标题、说明、进度条)和控制按钮(见下图),这些按钮可以工作(我可以播放/

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

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

我可以启动播放器,演示如下图所示,带有音频流。此时,通知被正确创建,它显示了播放器的详细信息(标题、说明、进度条)和控制按钮(见下图),这些按钮可以工作(我可以播放/暂停、从头开始重新启动和向后/向前跳过)

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


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

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

可能会停止活动的onStop/onPause方法中的播放。谢谢@sdex,我是否应该检查
!player.isplay()
在这些方法的if语句中?什么时候恢复呢?如果我这样做,当屏幕被锁定时,它允许播放继续,但当解锁屏幕时,音频会跳回到屏幕被锁定时的位置。此外,如果我只是添加一个复选框
!player.isplay()
在onPause/onStop中,当按下后退按钮退出播放器时,播放器不会停止,因此再次进入时会崩溃。是@harnev,删除releasePlayer允许播放器在后台继续。但这也让玩家可以继续留在应用程序中,但使用后退按钮导航离开(问题1)。然后,当通过选择其他曲目重新进入播放器时,播放器崩溃(问题2)。如何确保播放器仅在最小化或屏幕锁定时继续,而不是在应用程序中离开播放器屏幕时继续?这将是您需要自行处理的活动生命周期处理。像
onUserLeaveHint
这样的方法可以在用户按下home键或移动到另一个应用程序时发出通知,或者
onBackPressed
可以在用户返回到以前的活动或屏幕时发出通知。此视频还可以帮助您实现背景播放: