当前位置: 首页 > 知识库问答 >
问题:

带有音频焦点的Android-SimpleExoPlayer

糜正业
2023-03-14

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

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

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

很好用。

但是当用户按下播放按钮时,我无法请求audiofocus,我记得播放按钮是由PlaybackControlView封装的。

重新划分SimpleExoPlayer.setPlayWhenReady()似乎是不可能的,因为SimpleExoPlayer的实例是由工厂提供的,而不是从带有new关键字的instantation中提供的。

simpleExoPlayer = ExoPlayerFactory.newSimpleInstance(...)

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

更新(17/02/17):

这个解决方案的一个小问题是onPlayerStateChanged()是在音频/视频开始播放之后调用的,而不是之前。我实现了它,当两个音频同时播放时,非常短的重叠从耳朵上是不明显的。因此,如果您需要,它可以被认为是一个很好的解决方案。我会告诉你什么时候/如果ExoPlayer团队有更好的解决方案

共有1个答案

梅宏盛
2023-03-14

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

拦截播放/暂停呼叫的补丁

 类似资料:
  • 我正在尝试编写一个应用程序,它可以检测设备上的任何应用程序何时开始或停止播放音乐。我的应用程序不是媒体播放器,更多的是仪表板功能,所以我不需要请求音频聚焦,但我想知道其他应用程序何时会这样做,这样我就可以相应地更新我的状态文本。 本质上,我相信函数AudioManager.isMusicActive()将提供我想知道的东西,但是由于我正在编写一个将一直打开的服务,我希望避免需要不断地轮询它。我需要

  • 我有一个音乐播放器活动来控制歌曲的播放。我已经阅读了有关管理音频焦点的文档,并在

  • 语音焦点概述 语音交互不同于图形交互,相比于 GUI,VUI 在使用中用户更难以同时处理多个交互并行的场景,所以为了更好的用户体验,我们需要协调多个应用的语音交互请求,给用户一个专注的语音交互使用体验。 AudioFocus 如果把我们的设备当作一个机场,应用们代表了待机的飞机,YodaOS 系统相当于控制塔。我们的应用可以申请期望优先级的语音焦点,但最终的授权决定会由系统发出。我们通过 Audi

  • 我在我的Android应用程序中使用ExoPlayer播放一些教程视频,当我暂停视频时,音频焦点会被放弃,用户无法通过设备的物理按钮控制媒体音量(因为音频焦点已丢失按钮现在控制铃声音量),即使用户暂停视频,我也希望保持音频焦点,并且我只希望在用户退出教程时丢失它。 我已经尝试过设置exoPlayer.setAudio属性为null,这应该阻止exoplayer使用其默认的音频焦点设置,但当该选项设

  • 如果我在任何Android音乐播放器中播放音乐,然后用介绍视频启动我的应用程序(用MediaPlayer处理)音乐停止。我想避免(音乐继续播放),因为我的应用程序介绍视频本身没有声音。 当MediaPlayer启动它的内容时,是否可以避免获得音频焦点?(MediaPlayer.start()-->AudioManager为音乐播放器分派一个AudioFocusChange)

  • 我目前正在开发一个播放视频的应用程序,一些原生的,一些HTML5。对于原生视频,我使用ExoPlayer来播放视频,但有些源不提供原始视频文件,所以这些必须在WebView中作为HTML5视频播放。所有视频都以静音开始播放,如果用户取消静音视频,我获得音频焦点。这在ExoPlayer视频中非常有效,但是WebView在视频播放开始时就获得了音频焦点。