4

sock.connect() を呼び出すと、無期限にハングするという問題があります。例外もタイムアウトもありません。

try
    {
        Method m = dev.getClass().getMethod("createRfcommSocket", new     Class[] {int.class});          
        sock = (BluetoothSocket) m.invoke(dev, 1); 
        sock.connect();
        Thread.sleep(100);
        in = sock.getInputStream();
        out = sock.getOutputStream();
    }
    catch(ConnectTimeoutException ex)
    {
        return false;
    }
    catch(IOException ex)
    {
        return false;
    }
    catch(Exception ex)
    {
        return false;
    }

その理由は、別のアプリが既に Bluetooth デバイスを使用しているためです。接続を失敗させ、少なくとも例外または何かをスローして、デバイスが別のアプリで既に使用されていることを知らせようとしています。

これに近づくための他の提案はありますか?

ありがとう。

4

1 に答える 1

0

なぜ Thread.Sleep を呼び出しているのですか? BluetoothSocket.connect はブロッキング呼び出しです。これは、接続が成功して接続が返されるか、例外がスローされるまで、Thread.Sleep が呼び出されないことを意味します。

これをアクティビティで呼び出していますか?これにより、アクティビティがハングします。Bluetooth を処理する 3 つのスレッド、accept スレッド、connect スレッド、connected スレッドが必要です。ここの BluetoothChat の例のように:

http://developer.android.com/resources/samples/BluetoothChat/index.html

于 2012-04-20T10:57:11.920 に答える