【Android开发Wiki】进阶篇音频管理-Managing Audio Playback(二):音频管理焦点—Managing Audio Focus.pdf_第1页
【Android开发Wiki】进阶篇音频管理-Managing Audio Playback(二):音频管理焦点—Managing Audio Focus.pdf_第2页
【Android开发Wiki】进阶篇音频管理-Managing Audio Playback(二):音频管理焦点—Managing Audio Focus.pdf_第3页
【Android开发Wiki】进阶篇音频管理-Managing Audio Playback(二):音频管理焦点—Managing Audio Focus.pdf_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

eoe 移动开发者社区 原文链接 由于存在多个 App 同时请求播放音频的情况 所以您需要考虑这些 App 该如何交互 为避免 多个音乐 App 在同时请求音频播放的时候发生冲突 Android 平台使用了音频焦点这一概念 来协调音频播放 即只有获得音频焦点的 App 才可以播放音频 在应用开始播放音频之前 它需要首先请求并获得音频焦点 同时 App 应该能监听失去音 频焦点事件 并做出相应的处理 请求音频焦点请求音频焦点 在开始播放音频之前 App 必须先获取需要处理的音频流的音频焦点 音频焦点可以通过 r equestAudioFocus 方法获得 在音频焦点成功获取后 该方法会返回 AUDIOFOCUS REQUES T GRANTED 常量 否则 会返回 AUDIOFOCUS REQUEST FAILED 常量 您需要指定进行操作的音频流 并确定要获取短暂的还是长期的音频焦点 短暂的音频焦点 用于处理播放短时间的音频 例如汽车导航仪的提示 如果您想长时间播放音频 例如播 放音乐 那么就需要请求长期的音频焦点 下面的代码演示了如何获取 Music 音频流的长期焦点 获得音频焦点的请求应该在马上就要 播放音频前发出 比如在用户按下播放键或下一关游戏的背景音乐就要开始时发出焦点请求 接着再播放音乐 1 AudioManagerAudioManager am mContext getSystemService ContextContext AUDIO SERVICE 2 3 4 请求播放的音频焦点 5 intint result am requestAudioFocus afChangeListener 6 指定所使用的音频流 7 AudioManagerAudioManager STREAM MUSIC 8 请求长时间的音频焦点 9 AudioManagerAudioManager AUDIOFOCUS GAIN 10 11 ifif result AudioManagerAudioManager AUDIOFOCUS REQUEST GRANTED 12 am unregisterMediaButtonEventReceiver RemoteControlReceiverRemoteControlReceiver 13 开始播放 eoe 移动开发者社区 14 当完成音频播放后 请一定记得调用 abandonAudioFocus 方法 这会通知系统您的 App 不 再需要音频焦点 并移除相关 OnAudioFocusChangeListener 的注册 如果释放的是短暂音 调焦点 那么被打断的音频会被继续播放 1 当播放结束 您需要释放音频焦点 2 am abandonAudioFocus afChangeListener 当请求短暂音频焦点时 您可以添加有一额外的选择 是否使用 浮动声音 英文为 d ucking 这里是指降低原音频流播放的音量 并使获得短暂音频焦点的音频流音量较大 而不去停止原来音频流的播放 方式 通常来说 一个好的音频播放 App 会在失去音频焦点时立即停止播放 但如果在请求短暂音 频焦点时使用 浮动声音 方式 可以允许先前的 App 以较低的音量继续播放 在重新获得 音频焦点后再以原来的音量播放 1 请求播放的音频焦点 2 intint result am requestAudioFocus afChangeListener 3 指定所使用的音频流 4 AudioManagerAudioManager STREAM MUSIC 5 请求短暂焦点 6 AudioManagerAudioManager AUDIOFOCUS GAIN TRANSIENT MAY DUCK 7 8 ifif result AudioManagerAudioManager AUDIOFOCUS REQUEST GRANTED 9 开始播放 10 浮动音频非常适合间断播放音频的 App 例如导航仪的提示 当其他 App 通过上述方式请求音频焦点时 您所注册的监听器可以判断是否获得到了长期或 短暂 可以选择浮动音频方式 的音频焦点 对丢失音频焦点进行处理对丢失音频焦点进行处理 App 请求并得到音频焦点后 当其他 App 请求得到焦点时 先前的 App 就会失去焦点 您的 App 需要根据失去音频焦点的不同方式进行相应处理 eoe 移动开发者社区 请求音频焦点时注册的音频焦点监听器中有 onAudioFocusChange int 回调函数 该回调函 数会接收描述焦点变化事件的参数 需要注意的是 失去音频焦点的事件类型与请求焦点的 类型相对应 失去长期焦点 AUDIOFOCUS LOSS 短暂焦点 AUDIOFOCUS LOSS TRANSI ENT 和浮动音频方式的短暂焦点 AUDIOFOCUS LOSS TRANSIENT 一般情况下 App 在失去短暂音频焦点时 应该停止播放并记录下播放状态 但仍然需要监 听音频焦点的变化 当重新获得音频焦点时 需要在从先前暂停的地方继续播放 如果失去的是长期音频焦点 那就是说其他 App 需要使用当前音频流 而您的 App 需要尽快 结束 实际上 意味着您的 App 需要停止播放 移除媒体键监听器并释放音频焦点 这将 允许新的音频播放器独占地持有音频焦点等 这样一来 只有当用户执行了新的操作 如点 击 App 中的播放按钮 才可以重新播放音频 在下面的代码中 当 App 失去短暂的音频焦点时会暂停播放 当重新获得焦点时会继续播放 当失去的是长期音频焦点时 就会取消媒体按键事件接收器的注册并停止对音频焦点变化的 监听 1 OnAudioFocusChangeListenerOnAudioFocusChangeListener afChangeListener newnew OnAudioFocusChangeListenerOnAudioFocusChangeListener 2 publicpublic voidvoid onAudioFocusChange intint focusChange 3 ifif focusChange AUDIOFOCUS LOSS TRANSIENT 4 暂停播放 5 elseelse ifif focusChange AudioManagerAudioManager AUDIOFOCUS GAIN 6 恢复播放 7 elseelse ifif focusChange AudioManagerAudioManager AUDIOFOCUS LOSS 8 am unregisterMediaButtonEventReceiver RemoteControlReceiverRemoteControlReceiver 9 am abandonAudioFocus afChangeListener 10 停止播放 11 12 13 如果失去的是短暂且允许使用浮动播放 duck 的音频焦点 相比暂停播放 更好的做法应 该是使用 浮动播放 的方式 浮动播放 浮动播放 DuckDuck eoe 移动开发者社区 浮动播放会将您正使用的音频流输出音量降低 这会使其他 App 的短暂音频更容易听到 如 此一来您的 App 就不用被完全打断了 下面的代码会使 App 在暂时失去焦点时降低媒体播放器的音量 并在重新获得音频焦点时恢 复到原来的音量大小 1 OnAudioFocusChangeListenerOnAudioFocusChangeListener afChangeListener newnew OnAudioFocusChangeListenerOnAudioFocusChangeListener 2 publicpublic voidvoid onAudioFocusChange intint focusChange 3 ifif focusChange AUDIOFOCUS LOSS TRANSIENT CAN DUCK 4 降低音量 5

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论