Android 通过蓝牙发送数据
我对如何通过蓝牙连接发送数据有点困惑。在Android API文档中,来自Bluetooth聊天示例的类BluetoothChat.java构造了一个处理程序对象。其中有一个switch语句和一个Android 通过蓝牙发送数据,android,bluetooth,transmission,Android,Bluetooth,Transmission,我对如何通过蓝牙连接发送数据有点困惑。在Android API文档中,来自Bluetooth聊天示例的类BluetoothChat.java构造了一个处理程序对象。其中有一个switch语句和一个消息\u WRITE案例。我是否需要实现类似的代码来通过蓝牙发送字符串?要发送的每个字符串的case语句?特别是我想发送(名称、值)对,这样我就知道发送的是什么以及它的值是什么。我如何实现这一点?如果按照下面的示例,我调用BluetoothChatService.write(String.getByte
消息\u WRITE
案例。我是否需要实现类似的代码来通过蓝牙发送字符串?要发送的每个字符串的case语句?特别是我想发送(名称、值)
对,这样我就知道发送的是什么以及它的值是什么。我如何实现这一点?如果按照下面的示例,我调用BluetoothChatService.write(String.getBytes())
多次来发送。。。?那么我怎么知道哪些字符串与哪些名称关联呢?请提供帮助。将对序列化为允许字节表示的任何格式。例如XML或JSON。甚至你的自定义格式,对于成对的字符串来说也不难。然后发送。我在Android应用程序中使用谷歌的蓝牙连接发送结构化数据。protobuf负责为您确定如何序列化消息,这样您只需发送一个字节值(消息长度),然后发送序列化消息;该库负责在另一端取消序列化消息并填充自定义对象的字段。一定要看一看,;它使编写自定义蓝牙套接字协议变得非常简单。对于简单的字符串对(例如名称),您只需使用一些字符来定义第一个字符串何时停止,下一个字符串何时开始
例如,我使用这样的格式将一组3个字符串从一个设备发送到另一个设备:
String toSend = partOne + ":" + partTwo + ":" + partThree;
在另一台设备上,要获取发送的字符串,请使用String.split()方法,如下所示:
String parts[] = received.split(":",3);
第二个参数是分割次数的限制。在本例中,有3个字符串,因此最多拆分3次
这样做的缺点是,您需要使用除了最后一个字符串之外永远不会出现的字符
在我的应用程序中,我使用此方法发送有关文本消息的数据,前两部分是电话号码和时间戳,因此其中永远不会有:。对于名字,换行可能会起作用
如果要发送更复杂的数据,一定要使用协议缓冲区之类的东西。这样的东西:MyObject实现可序列化的{String name;String value;MyObject(String name,String value){this.name=name;this.value=value;}String getName(){return name;}String getVal(){return value;}}然后在蓝牙代码中:MyObject对=新的MyObject(“a”、“b”);write(pair.getBytes());回顾这一点,我的意思是序列化数据。我年轻时写的这篇文章,在我知道序列化之前。今天,我建议您使用JSON。您是否发现有必要将消息分成更小的“块”以支持最小的BLE消息长度23?