java - 同时通过蓝牙发送音乐和附加数据?

标签 java android bluetooth

场景:

我和我的 friend 们正在开发一种带有连接到扬声器系统的蓝牙接收器的产品。目前我们可以与这个装置配对并通过蓝牙连接播放音乐。我想开发一个应用程序,我可以在播放音乐时使用它来控制我们设备上的不同设置。无论哪个应用程序通过蓝牙播放音乐( native 媒体播放器、spotify、pandora 等),我的应用程序都需要能够执行此操作。我认为这可能是一个权限问题,而不是带宽问题......

我需要知道:

是否可以将控制数据和音频流同时发送到同一个蓝牙接收器?如果是这样,有人可以指出一个好的策略来帮助我完成这个(例如,控制数据使用什么协议(protocol))?如果不可能,有人可以推荐一种更好的方法来控制目标设备吗?

我无法在 Android 开发者文档中找到我要找的内容。

最佳答案

根据我在使用蓝牙方面的知识,最好的方法是在与音频数据包相同的数据包流中发送控制数据包,附加一个唯一的 ID 以使说话者能够识别并采取行动控制数据包。

理想情况下,您希望扬声器上的连接流专为控制而构建。这样一来,您的应用程序就可以连接到它并发送连接数据,然后扬声器会解释这些数据。

演讲者的伪代码看起来像

connectionURL = "btspp://localhost: " + uuid + ";name=control";
bluetoothConnection.open(url);

while (true) {
   // waits on this line until something tries to connect to it.
   bluetoothConnection.acceptAndOpen();

   /* Process control information */
}

至于暂停来自第三方应用程序的音乐,最简单的方法是使用应用程序 Request Audio Focus暂停并释放它以恢复。或者,您可以发送一个控制数据包来取消蓝牙音频流,但恢复起来可能会变得非常复杂。

关于java - 同时通过蓝牙发送音乐和附加数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25395094/

相关文章:

Java 代码函数捕获异常时的最佳实践

android - Fragments 的 onActivityReenter 生命周期方法

java - 如何为 Android 游戏保存数据并访问数据?

ios - 核心蓝牙特性不更新值

java - Spring Data JPA 忽略 FetchMode

java - 如何获取和设置对象数组中的名称?

Android BluetoothSocket OutputStream 无限写入 block

android - 蓝牙 SPP 和其他蓝牙服务

Java:处理状态和继承的设计模式

android - MPAndroidChart 如何设置 y 轴最小值和最大值或设置默认缩放?