GUIとは別のスレッドプロセスを使用して、データを読み取っているBluetoothSocketがあります。InputStreamをDataInputStreamでラップして、readFully(..)を使用して指定された量のデータを待機できるようにします。このコードを約1時間実行すると、プログラムがロックされ、デバッグ時にreadFully()でスタックします。Bluetoothが切断されたときに通知するようにGUIスレッドBroadcastReceiversに含めました。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) {}
}
}
}