Bluetooth-соединение: MODE_IN_CALL против MODE_IN_COMMUNICATION - PullRequest
0 голосов
/ 23 мая 2019

У меня есть приложение, которое требует подключения к беспроводной гарнитуре Bluetooth для сбора RAW-аудио. MODE_IN_CALL работает на некоторых устройствах и MODE_IN_COMMUNICATION на других. Микрофон работает, и я теряю звук или наоборот.

Я использую Nexus 5x и Samsung Edge. Но поведение несовместимо на 2 устройствах одной модели и марки. Телефонные звонки и Media Audio включены для сопряженной Bluetooth-гарнитуры.

</p> <pre><code>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(); } } }

Мне нужен код подключения Bluetooth, который работает на всех устройствах и версиях ОС. Заранее спасибо за любую помощь.

...