Android-SimpleExoPlayer与音频焦点



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

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

if (AudioManager.AUDIOFOCUS_REQUEST_GRANTED == audioManager.requestAudioFocus(...

工作良好。

但当用户按下播放按钮时,我有问题请求音频聚焦,我记得它被PlaybackControlView封装了。

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

重新定义simpleExoPlayer.setPlayWhenReady()似乎是不可能的,因为simpleExoPlayer的实例是由工厂给定的,而不是通过使用new关键字进行实例化。

simpleExoPlayer = ExoPlayerFactory.newSimpleInstance(...)

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

更新(17/02/17):

github.com/google/ExoPlayer上的这个问题被标记为增强。此处

他们的第一个答案是:

您可以通过向ExoPlayer实例(ExoPlayer.addListener)添加侦听器并实现侦听器的onPlayerStateChanged来实现这一点,以根据需要获得或释放音频焦点。请注意,只要更改playWhenReady,就会调用onPlayerStateChanged。

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

您可以使用setAudioArttribute在exo播放器中轻松管理音频焦点。这是代码:

AudioAttributes audioAttributes = new AudioAttributes.Builder()
.setUsage(C.USAGE_MEDIA)
.setContentType(C.CONTENT_TYPE_MOVIE)
.build();

然后将此AudioAttributes设置为播放器player.setAudioAttributes(audioAttributes, true);

这里true代表处理音频焦点,如果它是true的话。

ExoPlayer设计团队修复了以下补丁中的问题:

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

最新更新