Я пытаюсь подключить два устройства через Bluetooth через другое устройство.
На данный момент я смог подключиться к этим устройствам с помощью разъемов на третьем устройстве:
val deviceSocket = device.createInsecureRfcommSocketToServiceRecord(0000111e-0000-1000-8000-00805f9b34f) // HFP_HS_UUID
val phoneSocket = phone.createInsecureRfcommSocketToServiceRecord(0000111f-0000-1000-8000-00805f9b34fb) // HFP_AG_UUID
Теперь устройства могут обмениваться AT-командами между собой через потоки сокетов. Все команды доставлены правильно. Я могу отправить звонок с телефона на устройство или с устройства на телефон.
Основная проблема сейчас в том, что я не могу получить звук. Я уже пытался сделать это:
val audioManager = mContext.getSystemService(AUDIO_SERVICE) as AudioManager
audioManager.mode = AudioManager.MODE_IN_CALL // or AudioManager.MODE_IN_COMMUNICATION
audioManager.isBluetoothScoOn = true
audioManager.startBluetoothSco()
Я также попытался подключиться к сокету sco с помощью скрытого API в BluetoothDevice createScoSocket ():
val phoneSco = phone.createScoSocket()
phoneSco.connect()
и получил ошибку:
phoneSco connect error = java.io.IOException: read failed, socket might closed or timeout, read ret: -1
или выполнение застревает.
Если я сделаю это:
val deviceSco = device.createScoSocket() // 1
deviceSco.connect() // 2
Выполнение застрянет в строке 2.
Также я пробовал:
val serverSocket = bluetoothAdapter?.listenUsingScoOn()
val btSocket = serverSocket?.accept()
он также зависает при accept ()
Однако, если я подключу sco каким-либо образом, я перестану слышать звук на телефоне, а другой человек не услышь меня. Если не подключить sco, мы можем общаться, звук идет из телефона.
Есть ли способы получить аудио с одного устройства и переслать его на другое устройство?