4

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

4

3 回答 3

2

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

于 2011-07-07T17:14:56.470 回答
0

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

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

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

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

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

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

这样做的缺点是您需要使用除了最后一个字符串之外永远不会出现的字符。

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

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

于 2011-07-07T19:38:39.310 回答
0

将对序列化为任何允许字节表示的格式。例如 XML 或 JSON。甚至您的自定义格式,成对的字符串也不难。然后发送。

于 2011-07-07T12:20:00.377 回答