文档章节

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

dj_归去来兮
 dj_归去来兮
发布于 2016/05/23 10:38
字数 299
阅读 751
收藏 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_归去来兮
粉丝 15
博文 113
码字总数 31739
作品 0
合肥
Android工程师
私信 提问
如何用 React Native 开发实时音视频应用

对于 Web、iOS、Android 开发者来讲,React Native 给跨平台开发工作带来了很大的帮助。仅用 JavaScript 就可以创建运行于移动端的应用。同时,你也可以将 React Native 代码与 Native 代码结...

Agora
12/07
0
0
1111111

Android One项目是谷歌今年I/O大会上最引人关注的地方之一,在上个月,首批Android One智能手机也已经在印度正式发售。这些售价超低的智能手机品质如何?相信这是不少人所关心的问题。日前,...

bigTreee
2014/12/09
4
0
[图] Android One 手机试玩 一个前景光明的开端

Android One项目是谷歌今年I/O大会上最引人关注的地方之一,在上个月,首批Android One智能手机也已经在印度正式发售。这些售价超低的智能手机品质如何?相信这是不少人所关心的问题。日前,...

oschina
2014/10/04
3.7K
22
Android 蓝牙开发(七)hfp音频连接

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

VNanyesheshou
2017/05/08
0
0
android开发笔记之2012版辅助开发工具包(ADT)新功能特性介绍及安装使用

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

sisuad
2013/07/09
0
0

没有更多内容

加载失败,请刷新页面

加载更多

EOS官方钱包keosd

EOS官方钱包的名称是keosd,它负责管理你的私钥,并且帮你进行交易的签名。 不过不幸的是,keosd钱包对普通用户并不友好,它是一个命令行程序,目前还没有像以太坊的mist那样的图形化界面,而...

汇智网教程
今天
20
0
ArrayList的实现原理以及实现线程安全

一、ArrayList概述 ArrayList是基于数组实现的,是一个动态的数字,可以自动扩容。 ArrayList不是线程安全的,效率比较高,只能用于单线程的环境中,在多线程环境中可以使用Collections.syn...

一看就喷亏的小猿
今天
20
0
Netty 备录 (一)

入职新公司不久,修修补补1个月的bug,来了点实战性的技术---基于netty即时通信 还好之前对socket有所使用及了解,入手netty应该不是很难吧,好吧,的确有点难,刚看这玩意的时候,可能都不知道哪里...

_大侠__
昨天
30
0
Django简单介绍和用户访问流程

Python下有许多款不同的 Web 框架。Django是重量级选手中最有代表性的一位。许多成功的网站和APP都基于Django。 Django是一个开放源代码的Web应用框架,由Python写成。 Django遵守BSD版权,初...

枫叶云
昨天
36
0
Spring Cloud Stream消费失败后的处理策略(四):重新入队(RabbitMQ)

应用场景 之前我们已经通过《Spring Cloud Stream消费失败后的处理策略(一):自动重试》一文介绍了Spring Cloud Stream默认的消息重试功能。本文将介绍RabbitMQ的binder提供的另外一种重试...

程序猿DD
昨天
21
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部