蓝牙连接:MODE_IN_CALL与MODE_IN_COMMUNICATION

时间:2019-05-23 08:54:29

标签: android bluetooth android-wireless bluetooth-sco bluetooth-profile

我有一个需要连接到无线蓝牙耳机以收集RAW音频的应用程序。 MODE_IN_CALL在某些设备中起作用,而MODE_IN_COMMUNICATION在其他设备中起作用。 麦克风正常工作,我失去音频,反之亦然。

我正在使用Nexus 5x和Samsung Edge。但是行为在相同型号和制造商的2个设备之间不一致。 配对的蓝牙耳机已启用电话和媒体音频。

if (btAdapter != null && btAdapter.isEnabled() && btAdapter.getProfileConnectionState(BluetoothProfile.HEADSET) == BluetoothProfile.STATE_CONNECTED) {
    if (localAudioManager.isBluetoothScoAvailableOffCall()) {
                Bundle extrasBundle = registerReceiver(new BroadcastReceiver() {
                    @Override
                    public void onReceive(Context context, Intent intent) {
                        int conState = intent.getExtras().getInt(AudioManager.EXTRA_SCO_AUDIO_STATE);
                        if (conState ==AudioManager.SCO_AUDIO_STATE_CONNECTED) {
                            localAudioManager.setBluetoothScoOn(true);
                            context.unregisterReceiver(this);
                        } else {
                            if (conState == AudioManager.SCO_AUDIO_STATE_CONNECTING) {
                                writeLog("Bluetooth Receiver :SCO Connecting....");
                            } else if (conState == AudioManager.SCO_AUDIO_STATE_ERROR) {
                                writeLog("Bluetooth Receiver : SCO Error.");
                                context.unregisterReceiver(this);
                            } else if (conState == AudioManager.SCO_AUDIO_STATE_DISCONNECTED) {
                                writeLog("Bluetooth Receiver :SCO Disconnected");
                                localAudioManager.setBluetoothScoOn(false);
                            }
                        }
                    }
                }, new IntentFilter(AudioManager.ACTION_SCO_AUDIO_STATE_UPDATED)).getExtras();

                if (extrasBundle.getInt(AudioManager.ACTION_SCO_AUDIO_STATE_UPDATED) != 2) {
                    localAudioManager.setMode(AudioManager.MODE_IN_COMMUNICATION);
                    localAudioManager.startBluetoothSco();
                }
            }
        }

if (btAdapter != null && btAdapter.isEnabled() && btAdapter.getProfileConnectionState(BluetoothProfile.HEADSET) == BluetoothProfile.STATE_CONNECTED) { if (localAudioManager.isBluetoothScoAvailableOffCall()) { Bundle extrasBundle = registerReceiver(new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { int conState = intent.getExtras().getInt(AudioManager.EXTRA_SCO_AUDIO_STATE); if (conState ==AudioManager.SCO_AUDIO_STATE_CONNECTED) { localAudioManager.setBluetoothScoOn(true); context.unregisterReceiver(this); } else { if (conState == AudioManager.SCO_AUDIO_STATE_CONNECTING) { writeLog("Bluetooth Receiver :SCO Connecting...."); } else if (conState == AudioManager.SCO_AUDIO_STATE_ERROR) { writeLog("Bluetooth Receiver : SCO Error."); context.unregisterReceiver(this); } else if (conState == AudioManager.SCO_AUDIO_STATE_DISCONNECTED) { writeLog("Bluetooth Receiver :SCO Disconnected"); localAudioManager.setBluetoothScoOn(false); } } } }, new IntentFilter(AudioManager.ACTION_SCO_AUDIO_STATE_UPDATED)).getExtras(); if (extrasBundle.getInt(AudioManager.ACTION_SCO_AUDIO_STATE_UPDATED) != 2) { localAudioManager.setMode(AudioManager.MODE_IN_COMMUNICATION); localAudioManager.startBluetoothSco(); } } }

我需要一个可在设备和OS版本之间使用的蓝牙连接代码。 预先感谢您的帮助。

0 个答案:

没有答案