Android - 具有音频焦点的SimpleExoPlayer

时间:2017-02-14 14:01:15

标签: android audio android-audiomanager exoplayer

我使用SimpleExoPlayer实现了一个测试应用,工作正常。我现在想将audiofocus添加到我的应用程序中。

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

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

工作正常。

但是当用户按下播放按钮时我有问题请求音频焦点,播放按钮由我回想起的PlaybackControlView封装。

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

简化simpleExoPlayer.setPlayWhenReady()似乎不可能,因为SimpleExoPlayer的实例是由Factory提供的,而不是使用new关键字进行的。

simpleExoPlayer = ExoPlayerFactory.newSimpleInstance(...)

除了使用播放按钮解决此问题之外的任何其他想法?提前谢谢。

更新(17/02/17):

github.com/google/ExoPlayer上的此问题标记为ENHANCEMENT。 here

他们的第一个回答是:

  

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

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

2 个答案:

答案 0 :(得分:2)

ExoPlayer设计团队在下面的补丁参考中解决了这个问题:

Patch to intercept play/pause calls

答案 1 :(得分:0)

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

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

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

here true代表处理音频焦点,以防万一。