Я работаю над Android-приложением, которое использует соединение Bluetooth для передачи данных между моим Android-телефоном и не-андроидным модулем bluetooth, используя профиль SPP. Я использовал пример Bluetooth Chat с сайта разработчика Android в качестве ссылки.
Я успешно подключил два устройства друг к другу и отправил простые строки с смартфона на модуль bluetooth. Но у меня есть некоторая ошибка при чтении данных, отправленных обратно из модуля. Я использовал следующий код, который точно такой же, как в примере Bluetooth Chat, для чтения данных из InputStream
while (true) {
try {
// Read from the InputStream
bytes = mmInStream.read(buffer);
String str = new String(buffer);
Log.i(TAG, "mmInStream - " + str);
// Send the obtained bytes to the UI Activity
mHandler.obtainMessage(BluetoothChat.MESSAGE_READ, bytes, -1, buffer)
.sendToTarget();
} catch (IOException e) {
Log.e(TAG, "disconnected", e);
connectionLost();
break;
}
}
Когда мой модуль bluetooth отправляет простую строку на телефон, эта строка получена неправильно. Он разбивается на несколько частей случайным образом. Например, если я отправлю "1234567890abcdef1234567890abcdef0123456789" три раза на телефон, Logcat on Eclipse зарегистрирует их:
mmInstream - 12345678910abcdef��������(continuing null)
mmInstream - 1��������(continuing null)
mmInstream - 2345678910abcdef0123456789��������(continuing null)
в первый раз. Во второй и третий раз данные передаются, они принимаются в разностных частях:
mmInstream - 1234567891�������(continuing null)
mmInstream - 0abcdef012�������(continuing null)
mmInstream - 3456789���������(continuing null)
mmInstream - 1234567891����������������(continuing null)
mmInstream - 0abcdef0123456789������������(continuing null)
Я не знаю, почему это происходит и как решить эту проблему. Если данные принимаются произвольным образом, я не могу получить необходимые данные для обработки. Как я могу получить его в одной части?
Любая помощь будет оценена.
Большое спасибо.