1

BluetoothデバイスをAndroidアプリに接続しようとしています。これまでのところ、正常に動作しています。

今問題は、デバイスが範囲外になったときです。1 つのダイアログ ボックスを表示し、ユーザーに再接続するかどうかを尋ねています。

デバイスに再接続できる場合もあれば、エラーが発生する場合もあります。

Service Discovery Failed

そして、私は本当になぜそれが起こっているのか分かりません

private class ConnectThread extends Thread {

           public ConnectThread() {

           try {

            bluetoothSocket = bluetoothDevice.createRfcommSocketToServiceRecord(UUID);


        } catch (IOException e) {

              System.out.println("IO EXCEPTION" + e.getMessage() +"");

        }
      }

        public void run() {

           bluetoothAdapter.cancelDiscovery();

        try {
               // I AM GETTING ERROR HERE
               bluetoothSocket.connect();


        } catch (IOException connectException) {


        Log.d("Exception : ConnectThread -> Run" , connectException.getMessage()+"");

        try {

              bluetoothSocket.close();

         } catch (IOException e) {

        // TODO Auto-generated catch block

          e.printStackTrace();

       }

        return;

      }

     }
  }
4

2 に答える 2

0

私は同じ問題を抱えていました。私の解決策は私が使用しているデバイスに固有のものかもしれませんが、ソケットへの最後の通信と socket.close() の間でスレッドを 1000 ミリ秒スリープさせることで、正常に再起動することがわかりました。

于 2014-03-31T17:44:36.270 に答える
0

経験から、そして実際に今日同じ問題を抱えている、

私が推測するなら、あなたの他のデバイスは、切断(リンク損失)の際に、切断されたことをすぐに検出しないか(覚えていれば最大30秒かかる場合があります)、または単に動作が悪いと言えます。

したがって、SDP でサービスを再通知しない (ソケットを再度開かない) ため、Android が (クライアントとして) 接続を開始すると、サーバーは失敗します - 開いているソケットがありません。

他のデバイスのログを投稿する必要があります。別のデバイスで試してみてください - ただし、Android フォンとコードは同じです!

繰り返しますが、単なる推測です。

于 2012-10-31T13:46:48.090 に答える