Пример. Команда, которая должна быть получена в 1 строке:
Светодиод включен
Текущая реализация дает мне:
L
ED On
Или, если строка длиннее:
S
ervo Cente
R
Код: Выделить всё
val buffer = ByteArray(1024)
var numBytes: Int
inputStream = mSocket.inputStream
while (mSocket.isConnected) {
numBytes = inputStream.read(buffer)
mHandler.obtainMessage(
HandlerConstant.MESSAGE_READ,
String(buffer, 0, numBytes)
).sendToTarget()
}
Я попытался прочитать каждый байт в массив и создать из него строку. Я продолжаю получать разделительные линии.
Пример:
L
E
D
Н
n
Я посмотрел в Google Bluetooth Chat, как это реализовать, и это похоже на то, что я использую.
Подумав, что мои потоки блокируются, я попытался использовать терминал на ПК для отправки строк через Bluetooth с тем же результатом.
Кажется, я не могу выйти из inputStream.read(buffer) для проверки или циклического перебора полученных данных перед их передачей обработчику.
Я также попробовал следующее: код с большим успехом. Если строка немного длиннее, возникает та же проблема.
Пример:
Servo Cente
r
Код: Выделить всё
val buffer = ByteArray(1024)
var numBytes: Int
inputStream = mSocket.inputStream
while (true) {
loop = 0
val avail = inputStream.available()
if (avail > 1) {
numBytes = inputStream.read(buffer)
if(numBytes > 0) {
mHandler.obtainMessage(
HandlerConstant.MESSAGE_READ,
String(buffer, 0, numBytes)
).sendToTarget()
}
}
}
Я попробовал другой подход с лучшими результатами, но проблема все та же.
Код: Выделить всё
inputStream.buffered().read(buffer).let {
val sb = StringBuilder()
if (it > 0) {
sb.append(String(buffer, 0, it))
}
mHandler.obtainMessage(
HandlerConstant.MESSAGE_READ,
sb.toString()
).sendToTarget()
sb.clear()
}
Пример.
Сервопривод слева (нет проблем)
Сервопривод центральный
r (проблема)
Подробнее здесь: https://stackoverflow.com/questions/791 ... kips-lines
Мобильная версия