Сокет Android Bluetooth читает строку из входного потока, пропускает строкиAndroid

Форум для тех, кто программирует под Android
Anonymous
Сокет Android Bluetooth читает строку из входного потока, пропускает строки

Сообщение Anonymous »

Я разрабатываю приложение Bluetooth для Android, которое будет обеспечивать терминальную связь между Arduino и Android. Связь работает, но входной поток считывает и создает отдельные строки из сокета Bluetooth.
Пример. Команда, которая должна быть получена в 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()

}
Он без проблем достигает каждой строки, но если длина строки превышает 10 символов, проблема начинается снова.
Пример.

Сервопривод слева (нет проблем)
Сервопривод центральный
r (проблема)

Подробнее здесь: https://stackoverflow.com/questions/791 ... kips-lines

Вернуться в «Android»