Audio系统是竞争资源,因为在只有一个音频输出,2.2引入了称作AudioFocus的机制来管理对Audio资源的竞争的管理与协调。
按照AudioFocus的机制,在使用Audio之前,需要申请AudioFocus,在获得AudioFocus之后才可以使用Audio;如果有别的程序竞争你正在使用的Audio,你的程序需要在收到通知之后做停止播放或者降低声音的处理。值得指出的是,这种机制是需要合作完成的,需要所有使用Audio资源的程序都按照这种机制来做,而如果有程序在它失去AudioFocus的时候仍然在使用Audio,AudioFocus拿它也没办法。而这一点对于开放系统的Android来说很致命的:用户可能安装没遵守这种机制的程序,或者版本太老还没引入这种机制的程序,这最终会导致很差的用户体验。
AudioFocus的申请与释放:
获取或放弃AudioFocus的方法都在android.media.AudioManager中,获取AudioFocus用requestAudioFocus();用完之后,放弃AudioFocus,用bandonAudioFocus()。
正确使用Audio的程序要做到:
使用前,用requestAudioFocus()申请AudioFocus,并根据应用的实际选取恰当的durationHint值;
正确的在