Android2.2之前,没有内建的机制来解决多个程序竞争Audio的问题,2.2引入了称作AudioFocus的机制来管理对Audio资源的竞争的管理与协调。按照AudioFocus的机制,在使用AudioStream之前,需要申请AudioFocus,在获得AudioFocus之后才可以使用相应的AudioStream;如果有别的程序竞争你正在使用的AudioStream,你的程序需要在收到通知之后做停止播放或者降低声音的处理。值得指出的是,这种机制是需要合作完成的,需要所有使用Audio资源的程序都按照这种机制来做,而如果有程序在它失去AudioFocus的时候仍然在使用Audio,AudioFocus拿它也没办法。而这一点对于开放系统的Android来说很致命的:用户可能安装没遵守这种机制的程序,或者版本太老还没引入这种机制的程序,这最终会导致很差的用户体验。
在做媒体播放的过程中没注意到这个功能,以前是使用TelephonyManager监视来电状态,如来来电就暂停媒体播放,但经常导致service崩溃,现在使用Audio Focus就不用监听电话状态了。
关于Audio Focus的详细介绍:见
http://blog.163.com/android_home/blog/static/1890414292011826105324464/
http://www.linuxidc.com/Linux/2012-04/57902.htm