1

私は一日中これに頭を悩ませてきました。デバイスをリッスンする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);
        }

私は本当に自分が間違っていることを知りません。どんな助けでも大歓迎です。

ありがとう。

4

1 に答える 1