У меня есть BluetoothSocket, с которого я читаю данные, используя отдельный процесс Thread из GUI. Я обертываю InputStream в DataInputStream, чтобы можно было использовать readFully (..) для ожидания указанного объема данных. Я могу запустить этот код в течение часа, а затем программа блокируется, и когда я отлаживаю, она застряла в readFully (). Я включил в свой поток GUI BroadcastReceivers, чтобы уведомлять меня, когда Bluetooth отключается. BroadCastReceivers никогда не получают уведомления. Не уверен, почему устройство просто прекращает отправку данных, если это так, или даже не уверен, что Bluetooth SPP сбрасывается, но сокет все еще открыт, поэтому сообщение об отключении Bluetooth никогда не появляется. Будем благодарны за любые идеи относительно исправления или даже почему или как отладить, почему оно застряло.
Вот мой класс ReadBlueTooth ...
public class ReadBlueToothData extends Thread {
private BluetoothSocket btSocket;
private BluetoothAdapter bta;
private DataInputStream dinput;
public ReadBlueToothData(Activity a,String mac) {
...init object...
}
public void run() {
// if socket connected otherwise stop
if (dinput==null) return;
byte[] byteArray = new byte[3];
while (!Thread.interrupted()) {
dinput.readFully(byteArray, 0, 3);
// DO something ....
}
// close out InputStream nicely
if (dinput!=null) {
try {
dinput.close();
} catch (IOException e) { }
}
if (btSocket != null) {
try {
btSocket.close();
} catch (IOException e) {}
}
}
}