android 5.1无听筒喇叭,如何在来去电时保持整个过程声音从扬声器输出

   公司最近做的一个定制系统项目,其中有自己的app实现一个电话和录音功能。遇到几个坑,做个记录。
这设备只有单个喇叭接在扬声器通道上。平常使用是没问题的,但是当通话状态下,声音输出是从耳机出来的,所以
会没有声音,此时需要将声音输出切换到扬声器,并开启免提状态。要想达到此效果,需要将音频模式切换成IN_CALL,

只有在此状态audioManager.setSpeakerphoneOn(true)才能起效果。所以设置顺序不可以更改。

audioManager.setMode(AudioManager.MODE_IN_CALL);
audioManager.setSpeakerphoneOn(true);//需要先设置成MODE_IN_CALL,再切换speaker成免提才能起效果

当来电响铃时,音频模式并不需要切换,但是此时获得的audioManager.getMode(),有时会被系统切换成STREAM_RING,

这时就有可能没有声音,此时需要自己设置audioManager的音频mode为AudioManager.MODE_NORMAL。

当去电时,必须在对方响铃时就切换音频模式AudioManager.MODE_IN_CALL,并开启免提audioManager.setSpeakerphoneOn(true)。

以上总结一下,若是要保持声音一直从扬声器输出的话:

来电状态:

idle阶段:

audioManager.setMode(AudioManager.MODE_NORMAL);

audioManager.setSpeakerphoneOn(false);

Ring阶段;

audioManager.setMode(AudioManager.MODE_NORMAL);

OFFHOOK阶段;

audioManager.setMode(AudioManager.MODE_IN_CALL);
audioManager.setSpeakerphoneOn(true);//需要先设置成MODE_IN_CALL,再切换speaker成免提才能起效果

去电状态:

OFFHOOK和Ring阶段;

audioManager.setMode(AudioManager.MODE_IN_CALL);
audioManager.setSpeakerphoneOn(true);//需要先设置成MODE_IN_CALL,再切换speaker成免提才能起效果

idle阶段:

audioManager.setMode(AudioManager.MODE_NORMAL);

audioManager.setSpeakerphoneOn(false);


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值