Сокет 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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