Отправка данных через Bluetooth
Я немного озадачен тем, как отправлять данные через соединение Bluetooth. В документации по API Android из примера чата Bluetooth класс BluetoothChat.java создает объект обработчика. Внутри есть оператор switch и MESSAGE_WRITE
дело. Нужно ли реализовывать подобный код для отправки строк через Bluetooth? Заявление о регистре для каждой строки, которую я хочу отправить? В частности хочу отправить (name,value)
пары, так что я знаю, что отправлено и какова его ценность. Как мне это реализовать? Если, следуя примеру, я звоню BluetoothChatService.write(String.getBytes())
кучу раз отправить...? Тогда как мне узнать, какие строки связаны с какими именами? Пожалуйста помоги.
3 ответа
Я использую протоколы Google Buffers для отправки структурированных данных по соединениям Bluetooth в моем приложении для Android. protobuf позаботится о том, чтобы выяснить, как сериализовать сообщение для вас, так что вам нужно только отправить байтовое значение (длину сообщения), а затем сериализованное сообщение; библиотека заботится о десериализации сообщения на другом конце и заполнении полей пользовательского объекта. Определенно взгляните на это; это сделало написание пользовательского протокола сокета Bluetooth довольно простым.
Для простых пар строк (таких как имена) вы можете просто использовать какой-то символ, чтобы определить, когда первая строка заканчивается, а начинается следующая.
Например, я использую такой формат для отправки набора из 3 строк с одного устройства на другое:
String toSend = partOne + ":" + partTwo + ":" + partThree;
На другом устройстве, чтобы получить отправленные строки, используйте метод String.split() следующим образом:
String parts[] = received.split(":",3);
Второй параметр - это ограничение на количество раз, которое нужно разделить. В этом примере есть 3 строки, поэтому разделите их максимум на 3 раза.
Недостатком этого является то, что вам нужно использовать символы, которые никогда не будут во всех, кроме последней строки.
В моем приложении я использовал этот метод для отправки данных о текстовых сообщениях, а первые 2 части - это номер телефона и метка времени, поэтому в нем никогда не может быть:. Для имен, новая строка, вероятно, будет работать.
Если вы собираетесь отправлять более сложные данные, определенно используйте что-то вроде буферов протокола.
Сериализация пар в любом из форматов, который позволяет представление байтов. Например, XML или JSON. Или даже ваш собственный формат, это не будет трудно для пар строк. А потом отправь.