通过蓝牙发送数据

时间:2011-07-07 10:45:53

标签: android bluetooth transmission

我对如何通过蓝牙连接发送数据感到困惑。在Android API文档中,从Bluetooth Chat示例中,类BluetoothChat.java 构造了一个Handler对象。其中有一个switch语句和一个MESSAGE_WRITE case。我是否需要实现类似的代码才能通过蓝牙发送字符串?我要发送的每个字符串的case语句?特别是我想发送(name,value),所以我知道发送了什么以及它的价值是什么。我该如何实现?如果,按照这个例子,我多次拨打BluetoothChatService.write(String.getBytes())来发送......?那我怎么知道哪些字符串与哪些名字相关联?请帮忙。

3 个答案:

答案 0 :(得分:2)

我正在使用Google的Protocol Buffers在我的Android应用中通过蓝牙连接发送结构化数据。 protobuf负责确定如何为您序列化消息,以便您只需发送一个字节值(消息的长度),然后发送序列化的消息;该库负责在另一端反序列化消息并填充自定义对象的字段。绝对要看看它;它使得定制蓝牙套接字协议的编写非常容易。

答案 1 :(得分:0)

将对序列化为允许字节表示的任何格式。例如XML或JSON。或者甚至是你的自定义格式,对于字符串对来说并不困难。然后发送它。

答案 2 :(得分:0)

对于简单的字符串对(例如名称),您可以简单地使用一些字符来定义第一个字符串何时停止,以及下一个字符串何时开始。

例如,我使用这样的格式从一个设备向另一个设备发送一组3个字符串:

String toSend = partOne + ":" + partTwo + ":" + partThree;

在另一台设备上,要获取您发送的字符串,请使用String.split()方法,如下所示:

String parts[] = received.split(":",3);

第二个参数是分割次数的限制。在这个例子中,有3个字符串,因此最多分割3次

这样做的缺点是你需要使用永远除了最后一个字符串之外的所有字符。

在我的应用程序中,我使用此方法发送有关文本消息的数据,前两部分是电话号码和时间戳,因此在其中永远不会有:。对于名称,换行可能会有效。

如果您要发送更复杂的数据,请务必使用Protocol Buffers。