Я использую Android Bluetooth Chat образец кода для чата (отправка команд + получение ответов) с устройством Bluetooth. Он работает нормально, когда я отправляю команду и получаю ответ от устройства, который передается обработчику сообщений. Проблема, с которой я сталкиваюсь, заключается в том, что ответ разрезается на части.
Пример:
Я отправляю строку "{Lights:ON}\n"
, и моя активность правильно отображает Me: {Lights:ON}
. Индикаторы устройства включаются, и он возвращает ответ "{FLash_Lights:ON}\n"
. Однако моя активность отображает DeviceName: {Fla
, новую строку, DeviceName: sh_Lights:ON}
(или некоторые варианты и т. Д.).
Теперь я новичок в многопоточности и bluetooth в целом, но я проследил проблему до класса подключенного потока (в bluetoothchatservice), в частности, public void run()
для прослушивания входящих байтов.
public void run() {
Log.i(TAG, "BEGIN mConnectedThread");
byte[] buffer = new byte[9000];
int bytes;
// Keep listening to the InputStream while connected
while (true) {
try {
// Read from the InputStream
bytes = mmInStream.read(buffer);
// Send the obtained bytes to the UI Activity
mHandler.obtainMessage(BluetoothActivity.MESSAGE_READ, bytes, -1, buffer)
.sendToTarget();
} catch (IOException e) {
Log.e(TAG, "disconnected", e);
connectionLost();
// Start the service over to restart listening mode
BluetoothThreading.this.start();
break;
}
}
}
Я понимаю, что это было сделано для прослушивания любых входящих байтов (как служба чата). Однако я точно знаю, что я пишу на устройство, и я знаю ответ, который я должен получить, что я хотел бы сделать, так это связать этот ответ перед отправкой обратно в mHandler.
Любая помощь с этим была бы потрясающей! Спасибо!
Примечание. Я знаю, что использование этого примера в качестве способа отправки команды на устройство и получения ответа немного излишне (тем более, что я точно знаю, что отправляю, и что мне нужно получить сразу после этого). ). Было бы здорово, если бы вам указали на любой известный вам упрощенный образец. В конце концов, мне просто нужно выполнить поиск, подключиться к устройству, нажать кнопку, чтобы отправить байт [] на устройство, получить ответ байта [], распечатать + сохранить его.