12

もう一方のデバイスは既に検出されており、ペアリングも完了しています。少なくとも、Android フォンのペアリングされたデバイスのリストにそれがあります。

BluetoothSocket.connect() では、次の 2 つの問題が発生する可能性があります。

  1. リモート デバイスの電源がオフになっているか、使用できない

  2. リモート デバイスは、他の 1 つのデバイスのみをペアリングでき、別の電話とペアリングされているため、ペアリングを忘れました

    =>その後、一定のタイムアウト後に接続が失敗します。

すでにペアリングされているデバイスが実際に利用可能であり、接続せずに自分の電話とペアリングされたこと記憶していることを確認することはできますか? これは、デバイスが接続されているかどうかを検出することではありません。ペアリングされて表示されることは、接続されていることと同じではありません。

4

3 に答える 3

4

申し訳ありませんが、お使いのデバイスが別のデバイスが範囲内にあることを知る方法は、接続を試みない限りありません。また、リモート デバイスがペアリングを削除したかどうかを知るには、リモート デバイスに問い合わせる必要があります。たとえば、接続してペアリングを要求するかどうかを確認します。

他の方法は、接続する前にユーザーにこれらを確認させるか、外部チャネルの TCP/IP、WiFi、または NFC を使用することです。それがなければ魔力しかない。:-,)

于 2013-02-11T20:52:04.947 に答える
1
  1. 接続されていたデバイスを覚えておくのは、実は簡単です。デバイスへのバインドが成功すると、BluetoothDeviceオブジェクトが取得されます。で固有の MAC アドレスを問い合わせることができますgetAddress()。アドレスを取得したら、共有設定に保存します。これは「ペアリングされていたか」をカバーします。次に を使用してBluetoothAdapterバインドされたデバイスのリストを受け取ったときに、それらの中から保存されたデバイス アドレスを検索できます。
  2. デバイスの正確なアドレスがわかったので、それが「本当に利用可能」かどうかをどのように判断できますか? startDiscovery ()「発見」レベルでデバイスが利用可能かどうかを確認するために、デバイス ( ) を試して発見するだけで十分な場合は、トリック (リスト項目 1) を知っていることになります。デバイスが検出可能であることがわかり、デバイス完全に接続されていることをテストする必要がある場合は、新しいソケットを開いて、問題なく動作するかどうかを確認する必要があります。

私の経験では、考えられる 3 つの異なる BT デバイスの状況を扱います。

  1. デバイスがバインドされていません
  2. デバイスがバインドされていますが、接続されていません
  3. デバイスがバインドされ、接続されています
于 2013-02-10T21:42:56.010 に答える
0

すでにペアリングされているデバイスのリストを取得し、それらを現在検出可能なデバイスと相互検証できます。したがって、これにより、検出可能モードにあるペアリング済みのデバイスが得られます。

ただし、強制的に検出できないデバイスの場合は、それらに接続する必要があります。データが正常に送信されたリモート デバイスがアクティブな場合は、それらの間にソケット接続を作成してみてください。

また、リモート デバイスの getBondState() を使用してボンディング状態を確認し、ACTION_BOND_STATE_CHANGED レシーバーを登録して、ボンディング状態の変更のコールバックを取得することもできます。

于 2013-02-15T11:09:52.007 に答える