近期工作中,突然发现之前一直使用的来电铃声播放类在插入耳机后,铃声会从耳机中播放,而正常的逻辑是需要任何时候来电铃声都应由扬声器来播放的,故此回顾了下AudioManager的音频流类型知识,解决了此问题。(在此做个记录,避免若干时间后遗忘,也希望看到的朋友别踩坑了)~
OK,先看下之前的来电铃声播放类关键代码。如下,用的SoundPool来做播放:
/**
* 来电铃声播放控制
*/
public class IncomeRingUtil {
...
/**
* 初始化,在app启动时调用
*
* @param context
*/
public void init(Context context) {
if (Build.VERSION.SDK_INT >= 21) {
SoundPool.Builder builder = new SoundPool.Builder();
builder.setMaxStreams(1);
AudioAttributes.Builder attrBuilder = new AudioAttributes.Builder();
attrBuilder.setLegacyStreamType(AudioManager.STREAM_MUSIC);
builder.setAudioAttributes(attrBuilder.build());
soundPool = builder.build();
} else {
soundPool = new Sound