当前位置: 首页 > 知识库问答 >
问题:

在语音聊天应用程序中使用蓝牙耳机作为麦克风和扬声器

拓拔安邦
2023-03-14

我有一个语音聊天应用程序,它工作得很好。目前,我正在尝试使该应用程序支持蓝牙耳机,以防任何连接。我需要处理两种情况:

  1. 蓝牙耳机在通话开始前已连接
  2. 蓝牙耳机在通话过程中连接到设备

对于第一种情况,应用程序应自动开始使用耳机作为其默认输入/输出音频设备。另一方面,应用程序在耳机连接到设备后,应从当前输入/输出音频设备切换到蓝牙耳机。

我使用以下代码成功地处理了第一个案例:

mAudioManager.setMode(0);
mAudioManager.startBluetoothSco();
mAudioManager.setBluetoothScoOn(true);
mAudioManager.setMode(android.media.AudioManager.MODE_IN_CALL);

至于第二种情况,我创建了一个BroadcastReceiver,当蓝牙耳机连接时,它会监听,如下所示:

mBroadcastReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        if (BluetoothDevice.ACTION_ACL_CONNECTED.equals(action)) {
            mAudioManager.setMode(0);
            mAudioManager.startBluetoothSco();
            mAudioManager.setBluetoothScoOn(true);
            mAudioManager.setMode(android.media.AudioManager.MODE_IN_CALL);
        } else if (BluetoothDevice.ACTION_ACL_DISCONNECTED.equals(action)) {
            mAudioManager.setMode(0);
            mAudioManager.startBluetoothSco();
            mAudioManager.setBluetoothScoOn(false);
            mAudioManager.setMode(android.media.AudioManager.MODE_IN_CALL);
        }
    }
};

BroadcastReciever能够检测耳机连接/断开,并且呼叫将声音引导到耳机而不是手机的听筒。问题是该应用程序一直使用设备的麦克风作为输入音频设备,而不是耳机的。经过长时间的检查,我意识到当BroadcastReciever收到耳机已连接的通知时,我需要等待一段时间才能调用mAudioManager.startBluetoothSco();让应用程序使用耳机的麦克风。

问题是,在知道蓝牙耳机已连接后,我应该收听什么样的活动,以便开始从耳机的麦克风捕获声音?

共有1个答案

狄灵均
2023-03-14

原来我不应该听BluetoothDevice。ACTION_ACL_CONNECTED,而我应该考虑的是BluetoothHeadset。ACTION_CONNECTION_STATE_CHANGEDBroadcastReciever应该初始化如下:

mBroadcastReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();

        if (BluetoothHeadset.ACTION_CONNECTION_STATE_CHANGED.equals(action)) {
            int state = intent.getIntExtra(BluetoothHeadset.EXTRA_STATE, -1);
            boolean result = state == BluetoothHeadset.STATE_CONNECTED;
            mCallback.onConnected(result);
        }
    }
};
 类似资料:
  • 播放音符 播放声音 录制 文字转语音

  • 我正在使用语音识别应用程序。蓝牙耳机成功连接到我的android设备后,我想在内置麦克风和耳机麦克风之间自由切换音频输入,如何做到?

  • 我正试着用摄像机拍一段视频。然而,摄像机不支持蓝牙麦克风。幸运的是,我想我找到了一个方法来做这件事,但我找不到好的app来做这件事。我的计划是,将手机作为蓝牙接收器,并通过电缆将手机的音频端口连接到摄像机。我需要:一个应用程序,使蓝牙耳机作为系统的默认麦克风。一个应用程序,使声音从蓝牙麦克风能够流到音频端口。

  • 有没有办法通过耳机传送麦克风输入,同时通过智能手机扬声器使用音频输出? 我已经看了几个小时了,我看到这在iOS上显然是不可能的,但是Android呢... 我用的是三星Galaxy S4。 这是我的代码的一部分,即使耳机已插入,也可以通过扬声器路由音频输出: 但当我试图通过耳机的麦克风控制我的应用程序时,什么都没有。所以我试着用智能手机的那一个,它显然起作用了。 它看起来不像其他AudioMana

  • 我想使用扬声器进行音频输出,同时使用耳机插孔进行不同的音频输出/输入。这可能吗?

  • 所需功能: 它有点像iPhone本机手机应用程序。当有蓝牙/耳机连接到iPhone时,扬声器按钮(通常只有扬声器/手机切换)将显示所有可用的音频输出设备。默认使用蓝牙。用户可以选择其他设备播放声音。 问题: > 如何更新路由并将音频输出设置为所选设备? 请注意,AudioSessionGetProperty AND AudioSessionSetProperty的现有解决方案可能并不理想,因为iO