文档章节

YY项目之Android 听筒 扬声器 切换

dj_归去来兮
 dj_归去来兮
发布于 2016/05/23 10:38
字数 299
阅读 715
收藏 4

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

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);
        }
    }

© 著作权归作者所有

共有 人打赏支持
dj_归去来兮
粉丝 14
博文 113
码字总数 31739
作品 0
合肥
Android工程师
android开发笔记之2012版辅助开发工具包(ADT)新功能特性介绍及安装使用

原文链接:http://android.eoe.cn/topic/androidsdk 2012年的Android辅助设备开发工具包(ADK)是Android开放设备协议(AOA)设备的最新参考实现,它被用于帮助Android硬件辅助设备开发者 和...

sisuad
2013/07/09
0
0
Android 蓝牙开发(七)hfp音频连接

转载请注明出处:http://blog.csdn.net/vnanyesheshou/article/details/71374935 本文已授权微信公众号 fanfan程序媛 独家发布 扫一扫文章底部的二维码或在微信搜索 fanfan程序媛 即可关注 ...

VNanyesheshou
2017/05/08
0
0
三星S9+评测:没有跟风「刘海」,却依然稳坐机皇宝座

2018年注定将是被「刘海」统治的一年,主流厂商纷纷押注异形全面屏,意味着消费者将越来越难看到「不一样」造型的新机。然而总有几家厂商保持理性,三星便没有去刻意追求这种视觉上的「极致」...

雷科技
03/14
0
0
Android audioManager解决MediaPlayer AudioTrack 调节音量问

在听筒模式下 am.setSpeakerphoneOn(false); setVolumeControlStream(AudioManager.STREAMVOICECALL); am.setMode(AudioManager.MODEINCALL); 我用Mediaplayer AudioTrack调节音量总是失败 ......

程序袁_绪龙
2015/01/27
0
0
react native android 打包

1.生成离线bundle包 开发中了会知道RN项目的资源文件js css 字体图标 image是不在android or ios文件里面的, 离线包就是把 ReactNative 和你写的资源都打包放入 App . 首先在项目根目录创建文...

罗培海
08/02
0
0

没有更多内容

加载失败,请刷新页面

加载更多

崩溃bug日志总结1

目录介绍 1.1 java.lang.UnsatisfiedLinkError找不到so库异常 1.2 java.lang.IllegalStateException非法状态异常 1.3 android.content.res.Resources$NotFoundException 1.4 java.lang.Ille......

潇湘剑雨
53分钟前
0
0
学习大数据为什么要先学Java?

计算机编程语言有很多,目前用的多一点的就是Java,C++,Python等等。目前大多数学习大数据的人都是选择学习Java,那Java到底好在哪呢?为什么学大数据之前要先学Java呢?我们今天就来分析一...

董黎明
今天
1
0
php删除服务器所有session

php删除服务器所有session踢掉所有在线用户linux 注意:如果要删除服务器上所有session,重启php服务是解决不了问题的,php的session是持久化的。 有效解决办法: 删除 /tmp 下的所有文件(默...

妖尾巴
今天
0
0
Ubuntu18.04 安装最新版WPS

1.手动卸载libreoffice:sudo apt-get remove --purge libreoffice* 2.官网下载WPS和字体: WPS:http://wps-community.org/download.html 字体:http://wps-community.org/download.html?vl......

AI_SKI
今天
4
0
数据结构(算法)-图(深度优先搜索 DFS)

#include <iostream>using namespace std;#define MaxVex 30typedef char VertexType;typedef struct vexNode adjList[MaxVex];struct edgeNode{int adjvex;//邻接点......

ashuo
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部