21

是的,我知道 Android 已经实现了蓝牙耳机配置文件,但它是在音频网关角色中,而不是在耳机角色中。

我想做的是在 Android 手机上开发一个应用程序,它将充当蓝牙耳机,这样它就可以通过蓝牙连接到我的笔记本电脑。当我尝试打电话给某人时,我可以用我的手机拨打他,我的应用程序将通过蓝牙将语音转发到我的笔记本电脑,而笔记本电脑上运行的另一个应用程序将获取语音数据并将它们转发到 Skype 或 GTalk 或一些其他 VoIP 程序。

换句话说,如何在 Android 手机上实现 Headset Role 中的 Headset Profile?提前致谢!

4

2 回答 2

4

从android方面来说,我认为最好的解决方案是在您的计算机中打开与服务的连接:

URL url = new URL("http://192.186.0.1/path/to/service");
URLConnection connection = url.openConnection();

将其作为 OutputStream 获取:

OutputStream out = new BufferedStream(connection.getOutputStream());

然后使用 aAudioRecord发送记录的数据:

public static final int DEFAULT_SAMPLE_RATE = 8000; 
private static final int DEFAULT_BUFFER_SIZE = 4096; 
private static final int CALLBACK_PERIOD = 4000;

AudioRecord recorder = new AudioRecord(MediaRecorder.AudioSource.DEFAULT, 
            DEFAULT_SAMPLE_RATE, AudioFormat.CHANNEL_CONFIGURATION_DEFAULT, 
            AudioFormat.ENCODING_DEFAULT, DEFAULT_BUFFER_SIZE);
recorder.setPositionNotificationPeriod(CALLBACK_PERIOD);

int bytesRead = 0;
ByteBuffer buffer = ByteBuffer.allocateDirect(DEFAULT_BUFFER_SIZE);
while ((bytesRead = recorder.read(buffer, DEFAULT_BUFFER_SIZE)) > 0) {
    out.write(buffer.array(), 0, bytesRead);
}

当然,所有这些都应该在一个单独的线程上完成,以避免应用程序崩溃,以及在录制停止或连接丢失时处理的机制。另外,我很确定它应该可以通过 wifi 工作,尽管我不确定它是否与蓝牙相同(尽管大多数使用 BT 的设备现在都有 wifi 并且您可以获得更多带宽)

我还没有测试过这段代码,所以我不能 100% 确定它会起作用。

接下来的事情将是在机器上将音频传输到欲望应用程序中,但这超出了我的经验。我想你将不得不做一个虚拟驱动程序或类似的东西。还必须对从桌面应用程序发送到手机的音频执行反向机制(我对这部分很感兴趣,因为它也可以制作一个不错的无线耳机来观看电影)。

这是我的 2 美分;我很想知道它是否有效。;)

于 2011-09-30T10:09:06.687 回答
1

我不知道我是否理解真正的问题或你的主要目标......但我在这里发布了如何通过安卓中的蓝牙接收和发送耳机的声音。

我希望能帮助你...

于 2013-06-01T19:38:34.373 回答