私は一日中これに頭を悩ませてきました。デバイスをリッスンするBluetoothソケットがあります。これはAsyncTaskで行われます。初めてリモートデバイスから接続しようとしても問題ありません。今、私は切断をシミュレートしようとしています。範囲外に出るか、リモートデバイスのBluetoothアダプターをオフにするか、リモートで接続を閉じるかのいずれかです。現在、接続が失われると、サーバーソケットはIOExceptionをスローします。これを手がかりとしてAsyncTaskを再起動し、リッスンを再開しています。これは正常に機能しているようです。再起動時にすべてのlogcatメッセージが表示されるため、タスクが実行されていることはわかりますが、ソケットは接続を受け入れません。これがAsyncTaskの再起動で問題になる可能性があると考えて、接続が受け入れられた直後に接続をダンプしてみました。それらをリセットした後、
これが私がテストするために今使っているいくつかのコードです:
boolean running = true;
while(running){
btAdapter = BluetoothAdapter.getDefaultAdapter();
btServerSocket = btAdapter.listenUsingRfcommWithServiceRecord(NAME, ID);
btSocket = btServerSocket.accept();
btServerSocket.close();
btSocket.close();
btServerSocket = null;
btSocket = null;
btAdapter = null;
System.gc();
sleep(10);
}
私は本当に自分が間違っていることを知りません。どんな助けでも大歓迎です。
ありがとう。