Я не могу получить все данные из inputtream при подключении через bluetooth hc-05 в моем приложении для Android.Вот мой код:
val knownUUIDForDevice = UUID.fromString("00001101-0000-1000-8000-00805f9b34fb")
val remoteDevice: BluetoothDevice = BluetoothAdapter.getDefaultAdapter().getRemoteDevice(macAddress)
val btSocket: BluetoothSocket = remoteDevice.createRfcommSocketToServiceRecord(knownUUIDForDevice)
btSocket.connect()
connectedThread = ConnectedThread(btSocket, rawDataMessageCallback)
connectedThread.start()
Код моего подключенного потока:
class ConnectedThread(private val btSocket: BluetoothSocket)
: Thread() {
private var inStream: InputStream? = null
internal var outStream: OutputStream? = null
init {
inStream = btSocket.inputStream
outStream = btSocket.outputStream
}
override fun run() {
val buffer = ByteArray(512)
inStream = btSocket.inputStream
outStream = btSocket.outputStream
while (true) {
try {
inStream!!.read(buffer)
} catch (e: IOException) {
println(e)
break
}
}
}
}
Когда я тестировал соединение между моим устройством и приложением реального мира, я смог увидетьвсе данные.Приложение выше способно получать только около 80% данных.Я уверен, что это не ошибка устройства, потому что я могу видеть все данные в реальном приложении.Что я пробовал:
1) Добавить метод сна до / после чтения
2) обернуть inputStream в буферизованный поток
3) использовать inStream !!. ReadBytes () вместо inStream !!.read (buffer) -> поток завис на этом методе (внутри был вызов метода read ()) 4) проверка доступных данных с помощью метода method (), но это дало мне неверные результаты - то есть когда поток заканчивался, онпоказывает, что доступно 50 байт, но на самом деле я видел, что в буфере было доступно 200 байт ... В любом случае, согласно документации, я никогда не должен полагаться на этот метод.
5) Использовал IOUtils из apache commons & Bytestreams из guava ->результат такой же, как в 3-й точке, замораживание потока
6) Изменен размер буфера: пробовал 1, 10, 100, 256, 512, 1024, 10000 7
Вопрос: возможна ли потеряданные в inputStream?