我使用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设计团队修复了以下补丁中的问题:
拦截播放/暂停调用的补丁