使用另一个蓝牙设备通过蓝牙将两个设备彼此连接

时间:2020-03-26 09:34:22

标签: android 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()

我还尝试使用BluetoothDevice createScoSocket()中的隐藏API连接到sco套接字:

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,我们可以进行通信,声音来自电话。

是否有任何方法可以从一台设备获取音频并将其转发到另一台设备?

0 个答案:

没有答案