Android使用AudioManager切换到听筒模式

这篇博客详细介绍了如何在Android应用中将音频输出从扬声器切换到听筒模式,包括测试不同设备组合下的效果,以及实现代码的分享。尽管作为笔记应用未深入处理音频焦点问题,但计划利用距离感应器实现自动切换功能。
摘要由CSDN通过智能技术生成

经过几个阶段的开发,神马笔记已经实现了录音和播放录音的功能。

目前音频输出设备都是手机的扬声器,如果是在公共场合,又没有耳机,使用扬声器就不是特别方便。

因此,需要切换到听筒输出。

一、目标

将音频切换到听筒输出。

二、参考资料

1. 相关的功能类

功能类 描述
AudioManager 音频管理类,提供了音频管理的所有接口。
BroadcastReceiver 获取音频设备变化事件。

2. 参考文章

文章 说明
Android监听靠近听筒,音频播放切换听筒和外放 实用
android播放语音,切换听筒模式遇到的问题
Android5.0版本之后切换听筒模式
关于Android音频焦点的简单实现
《Android优化专题》——音频播放

三、测试结果

测试设备:荣耀畅玩7

MODE_RINGTONEMODE_NORMAL测试结果完全一致。

系统会根据当前连接的音频输出设备,决定Speakerphone最终的输出设备。

Speakerphone是逻辑设备,并不是最终的物理设备。

最终的物理设备根据设备连接情况以及所设置的模式而决定,可能是

  • 手机听筒
  • 手机扬声器
  • 有线耳机
  • 蓝牙音箱

1. 手机

Mode SpeakerphoneOn 结果
MODE_IN_COMMUNICATION true 手机扬声器
false 手机听筒
MODE_NORMAL true 手机扬声器
false 手机扬声器

2. 有线耳机

Mode SpeakerphoneOn 结果
MODE_IN_COMMUNICATION true 手机扬声器
false 有线耳机
MODE_NORMAL true 有线耳机
false 有线耳机

3. 蓝牙音箱

Mode SpeakerphoneOn 结果
MODE_IN_COMMUNICATION true 手机扬声器
false 手机听筒
MODE_NORMAL true 蓝牙音箱
false 蓝牙音箱

4. 有线耳机+蓝牙音箱

测试结果与有线耳机一致,音频优先输出到有线耳机上。

四、实现代码

public class AudioHelper {
   

    private static final String TAG = "AudioHelper";

    public static final int TYPE_RECEIVER   = 1;
    public static final int TYPE_SPEAKER    = 2;

    AudioManager audioManager;

    HeadsetPlugReceiver headsetPlugReceiver;
    BiConsumer<AudioHelper, Integer> headsetPlugListener;

    NoisyAudioStreamReceiver noisyAudioStreamReceiver;
    Consumer<AudioHelper> noisyAudioListener;

    FragmentActivity context;

    public AudioHelper(FragmentActivity context) {
   
        this.context = context;

        this.audioManager = (AudioManager)(context.getSystemService(Context.
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值