Android - 带音频焦点的 SimpleExoPlayer

u2g*_*les 5 audio android android-audiomanager exoplayer

我使用 SimpleExoPlayer 实现了一个测试应用程序,效果很好。我现在想将音频焦点添加到我的应用程序中。

当用户启动应用程序时开始使用音频焦点播放很容易。在 onCreate() 末尾添加常用代码:

        if (AudioManager.AUDIOFOCUS_REQUEST_GRANTED == audioManager.requestAudioFocus(...
Run Code Online (Sandbox Code Playgroud)

工作正常。

但是当用户按下播放按钮时,我无法请求音频焦点,这是我记得的 PlaybackControlView 封装的。

换句话说,使用SimpleExoPlayer和SimpleExoPlayerView(PlaybackControlView)时如何捕获播放按钮单击事件?

重新定义 simpleExoPlayer.setPlayWhenReady() 似乎不可能,因为 SimpleExoPlayer 的实例是由 Factory 给出的,而不是使用 new 关键字实例化的。

simpleExoPlayer = ExoPlayerFactory.newSimpleInstance(...)
Run Code Online (Sandbox Code Playgroud)

除了使用播放按钮解决这个问题之外,还有其他想法吗?提前致谢。

更新(17/02/17):

github.com/google/ExoPlayer 上的此问题被标记为“增强”。 这里

他们的第一个回答是:

您可以通过向 ExoPlayer 实例 (ExoPlayer.addListener) 添加侦听器并实现侦听器的 onPlayerStateChanged 以根据需要获取或释放音频焦点来实现此目的。请注意,每当 playWhenReady 发生更改时,都会调用 onPlayerStateChanged。

这个解决方案的小问题是 onPlayerStateChanged() 在音频/视频开始播放之后调用,而不是之前。我实现了它,当两个音频同时播放时,非常短的重叠从耳朵中当然是察觉不到的。因此,如果您需要的话,它可以被认为是一个很好的解决方案。当 ExoPlayer 团队提供更好的解决方案时,我会通知您。

u2g*_*les 3

ExoPlayer 设计团队在下面引用的补丁中修复了该问题:

拦截播放/暂停调用的补丁