让我困惑了好久。
我在 Android 手机上连接了两个 bt 音频设备,并且我想以编程方式切换特定的 bt 音频设备。
我搜索有关 a2dp、媒体路由器和audioManager 的关键字,但似乎无法执行此操作...
我找到该功能的唯一方法是:
BT 设备=> A 和 B 在 Android 手机上连接。 现在媒体播放到 A,我想切换到 B
第 1 步:A、B 在 Android 手机上取消配对。
第 2 步:在 Android 手机上配对。
第三步:在 Android 手机上进行 B 配对。
媒体播放输出为B,
似乎最新配对的蓝牙设备是媒体播放输出。
有人可以给我一些建议或指导吗? 谢谢大家
最佳答案
Documentation说它一次只能连接到一个 A2DP 设备,因此您应该能够通过连接到您想要使用的设备来在设备之间切换。 您可以使用 BluetoothSockets 连接到设备.
编辑: 我找到了其他解决方案,其中一个我认为可靠。它们都依赖于方法反射。
第一个来自这个 post .
- 从serviceListener获取BluetoothA2dp代理
bluetoothManager.adapter.getProfileProxy(this, serviceListener, BluetoothProfile.A2DP)
private val serviceListener = object : BluetoothProfile.ServiceListener {
override fun onServiceDisconnected(profile: Int) {
if (profile == BluetoothProfile.A2DP) {
bluetoothA2dp = null
}
}
override fun onServiceConnected(profile: Int, proxy: BluetoothProfile?) {
if (profile == BluetoothProfile.A2DP) {
handler.post(btSearchRunnable)
bluetoothA2dp = proxy as BluetoothA2dp
}
}
}
- 从反射中获取“connect”方法。
private val connect = BluetoothA2dp::class.java.getDeclaredMethod("connect",BluetoothDevice::class.java)
- 使用代理作为第一个参数、设备作为第二个参数来调用方法。
connect.invoke(bluetoothA2dp,device)
另一种方法使用反射来获取 createRfcommSocket
来规避您通常无法访问的一个参数的问题。我可以发布一个链接,但我遇到的一个问题是主线程总是滞后,总是给我一个错误并且连接不可预测。
关于java - 如何以编程方式在 Android 上的蓝牙音频设备之间切换音频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56458582/