2010-11-28 30 views
1

ACTION_ACL_CONNECTEDブロードキャストを受信する前に、アプリケーションが「受け入れ」コールを待っている場合、Bluetoothデバイスから正常に接続できます。私がブロードキャストに応答して 'accept'コールを発行した場合、私はソケット接続を行うことができません。ACTION_ACL_CONNECTEDの後にBluetoothデバイスとのソケット接続を作成する

Bluetoothイベントに応答してソケット接続をセットアップできるようにする方法はありますか?

+0

あなたは、放送後にサーバを起動することができます:http: //stackoverflow.com/a/15662892/2046601 –

答えて

0

ACTION_ACL_CONNECTEDへの応答として受け入れる方法はないと思いますが、これは通常のTCPソケットと同様に動作するように設計されています。リッスンは発生します(ブルートゥース用語では、SDUレコードにサービスUUIDを登録し、 accept()呼び出しが行われたとき)

あなたが受け入れる呼び出しのブロックを懸念していると、(受け入れる上でブロックする専用のスレッドを持っている余裕カント場合は、(タイムアウト)を受け入れる試すことができます)

+0

このよく知られたプロファイルがクライアントデバイスによって使用されるときはいつでもSPP接続の受け入れを待つようにアプリケーションを構築すると、私のアプリケーションは受け入れと処理を開始します。しかし、クライアントデバイスからのSPPプロファイル接続が別のアプリケーションの場合はどうなりますか?私は低レベルのACL接続ブロードキャストを見て、空になったばかりのデバイスが私のアプリが話すことができるデバイスかどうかを判断することができたらいいと思っていました。 –

+0

私が望んでいた振る舞いは、アプリケーションが「受け入れる」ことを試みた場合、Bluetoothスタックが最初に見え、デバイスに低レベル接続がアクティブであり、ソケット接続を試みているかどうかを確認することです。スタックがこれらの「応答されていない」接続の1つを見つけなかった場合、それは正常にブロックされます。 –

+0

あなたのアプリケーションは、リモートデバイスが発見したときにUUID(異なるアプリケーションに固有のもの)を使って自分自身を登録して識別し、このUUIDを介してアプリケーション/サービスを見つけた後、このUUIDに接続します。 )を使用して、このUUIDへの接続を待っています。したがって、複数のアプリケーションがSPPを使用している場合でも、accept()はUUIDに基づいて指示されます。さらに、接続したくないデバイスからいつでも切断することができます。 (あなたが接続したくないデバイスを知っている手段を持っている場合) –