ET *_*ker 21 android bluetooth headset
是的,我知道Android已经实现了蓝牙耳机配置文件,但它是音频网关角色,而不是HeadSet角色.
我想要做的是在Android手机上开发一个应用程序,它将充当蓝牙耳机,因此它可以通过蓝牙连接到我的笔记本电脑.当我试着打电话给某人时,我可以用我的手机拨打他,我的应用程序会通过蓝牙将语音转发到我的笔记本电脑上,另外一台笔记本电脑上运行的应用程序将获取语音数据并将其转发给Skype或GTalk或者某些其他VoIP程序.
换句话说,如何在Android手机上实现耳机角色的耳机配置文件?提前致谢!
从android方面,我认为最好的解决方案是在计算机中打开与服务的连接:
URL url = new URL("http://192.186.0.1/path/to/service");
URLConnection connection = url.openConnection();
Run Code Online (Sandbox Code Playgroud)
将其作为输出流获取:
OutputStream out = new BufferedStream(connection.getOutputStream());
Run Code Online (Sandbox Code Playgroud)
然后使用 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);
}
Run Code Online (Sandbox Code Playgroud)
当然,所有这些都应该在单独的线程上完成,以避免应用程序崩溃,以及在录制停止或连接丢失时进行处理的机制。另外,我很确定它应该可以通过 wifi 工作,尽管我不确定它是否与蓝牙相同(尽管大多数带有 BT 的设备现在都有 wifi 并且您可以获得更多带宽)
我还没有测试过这段代码,所以我不能 100% 确定它会起作用。
接下来的事情将是在机器上将音频传输到所需的应用程序中,但这超出了我的经验。我想你将不得不做一个虚拟驱动程序或类似的东西。还必须对从桌面应用程序发送到手机的音频执行反向机制(我对此部分非常感兴趣,因为也可以制作一个很好的无线耳机来观看电影)。
这是我的 2 美分;我很想知道它是否有效。;)
| 归档时间: |
|
| 查看次数: |
35915 次 |
| 最近记录: |