Android手机支持多个应用同时播放音频。操做系统会把多个音频流混合在一块儿播放,可是多个应用同时播放音频,给用户带来的体验每每不佳。为了提供更友好的用户体验,Android提供了一个API,让应用程序能够共享音频焦点,旨在保证同一时段内只有一个应用能够维持音频聚焦。html
本系列文章旨在让您深刻理解音频焦点的含义,使用方法和其对用户体验的重要性。本篇文章是该系列的第一部分,该系列三篇文章包含了:前端
音频焦点的良好协做性,主要依赖于应用程序是否遵循音频焦点指南,操做系统没有强制执行音频焦点的规范来约束应用程序,若是应用选择在失去音频焦点后继续大声播放音频,会带来不良的用户体验,可能直接致使应户卸载应用,但这是没法阻止的行为,只能靠开发者自我约束。react
下面是一些音频焦点使用场景(假设用户正在使用您的应用播放音频)。android
当您的应用须要播放声音的时候,应该先请求音频聚焦,在得到音频焦点后再播放声音。ios
您的音频1和另外一个应用的音频2会重叠播放,用户没法正常听到来自任何应用的音频,这样的用户体验很不友好。git
在另外一个应用须要播放音频时,它会请求音频焦点常驻,即音频永久聚焦。一旦系统受权,它便会开始播放音频,这时候您的应用须要响应音频焦点的丢失通知,中止播放。这样用户就只会听到另外一个应用的音频。github
一样的道理,假如过了五分钟,您的应用须要播放音频,您一样须要申请音频焦点,一旦得到系统受权,咱们就能够开始播放音频,其它应用响应音频焦点丢失通知,中止播放。后端
手机响铃后,用户会听到铃声和您的手机音频叠加在一块儿播放。若是用户选择直接挂断电话,您的音频会保持播放。若是用户选择接通电话,他会听到通话声音和您的应用音频叠加在一块儿播放,挂断通话后您的应用音频会保持播放。不管如何,您的应用音频将全程保持播放状态。这带来的通话体验极差。session
当手机响铃(您还未接通电话), 您的应用应该选择相应的回避(这是系统应用的要求)措施来响应短暂的音频焦点丢失。回避的措施能够是把应用的音量下降到百分之二十,也能够是直接暂停播放(若是您的应用是播客类,语音类应用)。app
当您的应用须要输出音频时,应该请求音频焦点。只有在得到音频焦点后,才能开始播放。可是,在播放过程当中可能没法把音频焦点一直据为己有,由于其它应用程序能够发出音频焦点的请求来抢占音频焦点,这种状况下,您的应用能够选择暂停播放或者下降音量,这样用户才能更清晰地听到其它应用程序的音频。
想详细了解更多应用程序中音频焦点的场景用例,请阅读本系列 第二篇文章。
理解音频焦点 (第2/3部分) - Nazmul Idris (Naz) - Medium
想学习怎么在您的应用中实现音频焦点的相关操做,请阅读本系列 第三篇文章(终章)。
理解音频焦点 (第3/3部分) - Nazmul Idris (Naz) - Medium
掘金翻译计划 是一个翻译优质互联网技术文章的社区,文章来源为 掘金 上的英文分享文章。内容覆盖 Android、iOS、React、前端、后端、产品、设计 等领域,想要查看更多优质译文请持续关注 掘金翻译计划、官方微博、知乎专栏。