我需要能够通过蓝牙发送和接收音频,似乎A2DP就是这样做的
使用给定here的代码,我设法让我的手机检测并与远程蓝牙设备配对,然后建立A2DP连接,通过蓝牙将Android设备的所有音频输出发送到远程设备
我以前能够通过RFCOMM与同一个远程蓝牙设备进行这种双向数据通信(Android手机需要是启动通信的那个,虽然我知道它是通过远程设备我无法做到的可能)。建立RFCOMM链接后,Android设备可以将数据发送到远程设备,并从中接收数据
我现在需要的是类似的东西,但对于音频(最好使用A2DP,但我愿意使用其他任何东西,只要它完成工作)。在窥探时我已经得到提示,通过A2DP在手机上接收音频数据(至少是无根的正常,而根本不是我的选择)是不可能的(例如,参见here)。但我也看到耳机允许完全通过蓝牙拨打电话(实际上,无线实际上,我假设它必须是蓝牙)。例如,对于来电,您只需按下蓝牙耳机上的按钮,即可通话,也可以收听对方。如果手机不能用作音频接收器,那么这些耳机怎么做呢?
我需要一些关于如何编写Android应用程序以发送以及通过蓝牙接收音频数据的想法(为简单起见,我们认为它类似于Bluechat sample program,但涉及音频而不是文本)。它是否可能(通过java)?是否只能通过NDK?市场上的设备如何做到这一点?它与A2DP的概况不同吗?
PS:我的测试设备是带有Gingerbread的三星Galaxy 2(手机)和带有KitKat的华硕Nexus 7(平板电脑)。顺便提一下,远程蓝牙设备(它是一个开发板)附带了一个示例项目,该项目应该将电路板转换为A2DP音频源。如果我在主板上运行这个示例项目,使用手机和平板电脑的内置蓝牙设置,我可以与远程主板配对,但Android设备不会收到任何音频。 / p>
答案 0 :(得分:3)
有两种不同的A2DP配置文件,A2DP source
和A2DP sink
。 Android支持A2DP source
个人资料,因此您可以将音乐从设备流式传输到水槽,如蓝牙音箱。据我所知,A2DP sink
个人资料未启用,这就是为什么您无法将音乐流式传输到手机并让其充当发言人的原因。我只是在前一段时间用Google搜索过,所以事情可能已经改变了。
可以通过修改A2DP sink
并重新启动手机来启用/etc/bluetooth/audio.conf
个人资料。不幸的是,这会产生禁用A2DP source
配置文件的副作用,因此无法在广泛分布的应用中使用。另一个缺点是用于处理该配置文件的Java软件堆栈并不多,因此您必须做很多工作才能完成工作。
要回答有关耳机为什么能够连接到Android的问题,这是因为耳机使用了一种名为Headset profile (HSP)
的不同配置文件,通常由耳机使用,或Handsfree profile (HFP)
常用于汽车。两个配置文件都有两个方面:客户端和网关端(移动电话)。这两种配置文件的音频质量都被视为语音质量。 8或16kHz采样率和糟糕的编解码器。还有很多用于接听/拨打电话的协议......我不确定你是否在没有有效连接到电话网络的情况下发送音频。
答案 1 :(得分:1)
对于A2DP水槽支持 - 是。有可能的。我在Android JB中完成了它。 Android device as a receiver for A2DP profile - 请阅读我的回复。