Мое приложение для Android получает последовательную связь по Bluetooth из настольного приложения.Я не контролирую, что делает это настольное приложение.
Использование примера кода Google BluetoothChat (https://github.com/googlesamples/android-BluetoothChat). Мне удается заставить его работать, и в некоторой степени я могу просто забрать байты, поступающие на мой андроидприложение и написать файл.
Однако функция кода выглядит примерно так:
1 - прослушивание Android
2 - отправка данных с ПК, прием данных Android с подключением, чтение и запись вfile
3 - во время чтения Android обнаруживает исключение (клиент закрывает соединение?) и закрывает соединение
4 - возвращается к одному и прослушивает следующие несколько байтов
Моя проблемаявляется то, что мне нужно знать, когда этот процесс заканчивается, чтобы обработать файл и отобразить некоторый результат в пользовательском интерфейсе.
Код этого файла
https://github.com/googlesamples/android-BluetoothChat/blob/master/Application/src/main/java/com/example/android/bluetoothchat/BluetoothChatService.java
Специально
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 Communication должен быть способ указать, что клиент уже завершил отправку всех сообщений.
Ранее я пытался использовать IoException как место, чтобы сигнализировать пользовательскому интерфейсу, что чтение данных с ПК завершено.Это катастрофа, потому что по какой-то причине исключения происходят только в начале общения.И я понятия не имею, почему мои коды все еще продолжают записывать в файл.
Я повторю, что у меня нет никакого контроля над приложением для ПК / ПК.Поэтому, пожалуйста, не предлагайте ничего, что затрагивало бы изменение работы настольного приложения или отправку данных.
Необходимо справиться с этим на стороне Android.