管理音频焦点


管理音频焦点

播放音频的应用必须仔细设计,以便以用户友好的方式与其他应用和服务配合使用。为了管理跨应用的音频播放,安卓提供了音频焦点的概念。本文档概述了如何在 Fire TV 上管理音频焦点和其他相关事件。

音频焦点的复杂性

不要低估处理音频焦点的复杂性。除其他主题外,在开发应用时,请考虑以下事项:

  • 您的应用设计为在前台还是后台播放音频
  • 如何通知其他应用应停止播放
  • 当其他应用开始播放时,您的应用如何反应
  • 您的应用如何以及何时处理传入的多媒体事件(例如暂停、快进等)
  • 如何处理系统通知和其他短时间音频中断
  • 语音搜索如何中断您的应用
  • 语音控制解决方案如何与您的应用交互
  • 何时允许您的应用持有资源和唤醒锁

请注意,对播放视频的应用的预期可能与仅播放音频的应用有很大不同。

多媒体应用文档

参见所有相关的安卓开发者页面,其中介绍了 API 级别 22 (Fire OS 5) 和 25 (Fire OS 6)。您应该了解如何实施以下开发者页面上描述的行为:

处理音频焦点

开发应用时,请遵循音频焦点事件要求中描述的所有要求。请注意以下事项:

  • 播放的持续时间必须与保持音频焦点和将 MediaSession 设置为活动的持续时间完全匹配。这也意味着您必须在完成播放后立即放弃焦点请求。
  • 所有音频焦点更改回调都必须按照 Android 8.0 之前的音频焦点中的描述进行处理。
  • 当应用在后台播放时,它必须处理多媒体事件(持续处理,同时还具有音频焦点)。
  • 接收任何类型的音频焦点丢失事件应导致应用停止处理多媒体事件,直到重新获得焦点。
  • 永久失去焦点意味着您的应用不会再次获得焦点;它应释放所有资源。
  • 不要多次请求音频焦点,而不放弃之前的请求(以避免多次在焦点堆栈中注册)。
  • 放弃音量应设置为不会干扰其他应用或语音搜索响应的级别,例如,将音量设置为原始音量的 30-40%。

语音互动

当用户按遥控器上的麦克风按钮(“近场”),或者当带有麦克风的设备识别设备的唤醒字(“远场”)时,系统范围的语音功能将启动,并且无法覆盖。将发送音频焦点事件 (AUDIOFOCUS_LOSS_TRANSIENT) 和活动生命周期事件 (onPause())。

一般来说,您的应用应该暂停(或至少将音频静音)以响应语音交互。您的应用应该准备好以安卓允许的任何顺序接收事件。除其他选项外,用户还可以指示 Alexa 启动新的应用,例如,用户可以打开或关闭音响系统。因此,当您的播放暂停时,音频功能可能会发生变化。在继续播放之前,您应该正确地对所有这些更改作出反应。

正确实现 MediaSession 接口的应用可以通过语音命令进行控制。有关如何通过语音启用控制的详细信息,请参阅对您的应用和内容启用语音功能。Fire TV 上的语音搜索也可以在搜索结果中包含应用中的内容。有关此功能,请参阅将您的目录与 Fire TV 集成