Мое приложение для Android получает последовательную связь через Bluetooth от настольного приложения. Я не могу контролировать то, что делает это настольное приложение.
Использование примера кода Google BluetoothChat (https://github.com/googlesamples/android-BluetoothChat) . Мне удается заставить его работать, и в какой-то степени я могу просто взять байты, поступающие в мое приложение для Android, и записать файл.
Однако функция кода выглядит примерно так
1 - Android слушать
2 - ПК отправляет данные, Android принимает данные о соединении, читает данные и записывает в файл
3 - Во время чтения Android сталкивается с исключением (клиент закрывает соединение?) и закрывает соединение
4 - Вернуться к одному и слушать следующие несколько байтов
Моя проблема в том, что мне нужно знать, когда этот процесс заканчивается, чтобы обработать файл и отобразить результат в пользовательском интерфейсе.
Код это один файл
Конкретно
public void run() {
Log.i(TAG, "BEGIN mConnectedThread");
byte[] buffer = new byte[1024];
int bytes;
// Keep listening to the InputStream while connected
while (mState == STATE_CONNECTED) {
try {
// Read from the InputStream
bytes = mmInStream.read(buffer);
// ==> This is where I wrote to file
// ==> Standard Android Java code to write
// ==> to output file stream
// Send the obtained bytes to the UI Activity
// ==> Commented out because this can not be done here
// ==> NEED TO BE DONE WHEN ALL DATA IS READ
// mHandler.obtainMessage(Constants.MESSAGE_READ, bytes, -1, buffer)
// .sendToTarget();
} catch (IOException e) {
Log.e(TAG, "disconnected", e);
connectionLost();
break;
}
}
}
Ожидается, что в Android RFCOMM или связи Bluetooth должен быть способ обозначить, что клиент уже завершил отправку всех сообщений.
Раньше я пытался использовать IoException как место, чтобы сообщить пользовательскому интерфейсу, что чтение данных с ПК завершено. Это катастрофа, потому что по какой-то причине исключение происходит только в начале связи. И я понятия не имею, почему мои коды продолжают записывать в файл помимо этого.
Я собираюсь повторить, что у меня нет никакого контроля над приложением для ПК/рабочего стола. Поэтому, пожалуйста, не предлагайте ничего, что связано с изменением работы настольного приложения или отправки данных.
Нужно обрабатывать это на стороне Android.