如何连接到蓝牙A2DP设备?

4
我正在尝试将一台运行Android 4.1的Android设备与支持A2DP的音频接收器配对。我可以在蓝牙设置屏幕上轻松完成此操作,但我在代码中遇到了困难。
基本上,我能够发现该设备,但无法通过套接字连接到它。也许我使用了错误的UUID,或者我应该使用预定义的android.bluetooth.BluetoothA2dp类。这是我正在做的事情:
UUID uuid = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");
socket = device.createInsecureRfcommSocketToServiceRecord(uuid);
socket.connect();

但是我收到一个异常,提示无法连接。
java.io.IOException: Service discovery failed
at android.bluetooth.BluetoothSocket$SdpHelper.doSdp(BluetoothSocket.java:403)
at android.bluetooth.BluetoothSocket.connect(BluetoothSocket.java:213)

我还尝试使用设备通过 device.getUuids() 提供的UUID连接,但这些也无法帮助连接到a2dp设备。

任何有关如何连接到a2dp设备的帮助都将不胜感激。谢谢。


你能否搜索并配对到这个设备? - Narendra Pal
当搜索设备时,我可以找到该设备。我原以为与设备创建套接字连接会自动配对。在设置中查找和配对没有问题。 - Moritz
嗨,Mortiz,能问一下您对这个问题有了进展吗?我现在正在尝试将一个4.2+的Android设备连接到A2DP蓝牙扬声器,但是我也很难弄清楚该如何着手解决它。提前感谢您的帮助。 - Ted
嗨,@Ted。不幸的是,我的研究没有取得成功的结论。 - Moritz
你如何创建蓝牙的套接字? - Skizo-ozᴉʞS ツ
1个回答

2

A2DP不是通过RFCOMM完成的,因此您无法使用createRfcommSocket API。数据直接通过指定协议mux ID(一个用于控制,另一个用于流数据)在L2CAP流上传输。


你能详细说明一下如何设置连接吗? - Moritz
这并不简单。你需要打开一个L2CAP套接字,而使用Android Java API是不可能的。你必须进入实际的C语言BlueZ编程中。一旦你打开了L2CAP套接字,你就必须实现AVDTP协议。你可以在BlueZ源代码中找到开源实现。但是如果你没有蓝牙规范的访问权限,这将会很困难。 - TJD
1
嗯,不是我希望得到的答案。但感谢你的参与。 :) - Moritz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接