android 听筒模式外放模式的切换,YY项目之Android 听筒 扬声器 切换

废话不多说,直接上代码:

private void setSpeakerphoneOn(boolean on) {

if (on) {

// 为true打开喇叭扩音器;为false关闭喇叭扩音器.

audioManager.setSpeakerphoneOn(true);

} else {

audioManager.setSpeakerphoneOn(false);//关闭扬声器

audioManager.setRouting(AudioManager.MODE_NORMAL, AudioManager.ROUTE_EARPIECE, AudioManager.ROUTE_ALL);

setVolumeControlStream(AudioManager.STREAM_VOICE_CALL);

//把声音设定成Earpiece(听筒)出来,设定为正在通话中

// audioManager.setMode(AudioManager.MODE_IN_CALL);

audioManager.setMode(AudioManager.MODE_IN_COMMUNICATION);

}

}

这里将audioManager.setMode(AudioManager.MODE_IN_CALL)注释掉换成audioManager.setMode(AudioManager.MODE_IN_COMMUNICATION)的原因是因为

Android 5.0版本限制使用AudioManager.MODE_IN_CALL模式了,除非是系统应用,第三方应用使用AudioManager.MODE_IN_COMMUNICATION替代之

2016年06月18日18:20:23

发现个问题:

某些情况下,这写代码可能会出问题,用户点击音量按钮获取不到音量控制权

添加如下代码即可

audioManager.setMode(AudioManager.STREAM_SYSTEM);

setVolumeControlStream(AudioManager.USE_DEFAULT_STREAM_TYPE);

整合后代码如下所示:

private void setSpeakerphoneOn(boolean on) {

if (on) {

// 为true打开喇叭扩音器;为false关闭喇叭扩音器.

audioManager.setSpeakerphoneOn(true);

// 2016年06月18日 添加的代码,恢复系统声音设置

audioManager.setMode(AudioManager.STREAM_SYSTEM);

setVolumeControlStream(AudioManager.USE_DEFAULT_STREAM_TYPE);

} else {

audioManager.setSpeakerphoneOn(false);//关闭扬声器

audioManager.setRouting(AudioManager.MODE_NORMAL, AudioManager.ROUTE_EARPIECE, AudioManager.ROUTE_ALL);

setVolumeControlStream(AudioManager.STREAM_VOICE_CALL);

//把声音设定成Earpiece(听筒)出来,设定为正在通话中

// audioManager.setMode(AudioManager.MODE_IN_CALL);

audioManager.setMode(AudioManager.MODE_IN_COMMUNICATION);

}

}

相关资源:视美乐购smlg2020-9-25版.apk-互联 文档类资源-CSDN文库

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2021年5月4日
下一篇 2021年5月4日

相关推荐